Ho uno strano comportamento durante il ciclo (vero). Ecco il codice:Strano comportamento java con ciclo while e coda
qualità di membro della classe che ho:
static Queue<Object> response = new LinkedList<Object>();
... e una funzione:
private void read() {
while (true)
{
System.out.println("foo");
if(!(response.isEmpty()))
{
if((Boolean)response.peek() == true)
{
view.dispose();
LogInControler controler= new LogInControler();
disableMasterLogin();
response.poll();
return;
}
else if((Boolean)response.poll() == false)
{
JOptionPane.showMessageDialog(view.getRootPane(),
"Wrong username or password.");
view.tfUsername.requestFocus();
return;
}
}
}
}
Quando un oggetto viene ricevuto dal server (via Socket), InputController classificare tale oggetto sul controller appropriato, in questo caso MasterLogInController e inserirlo in risposta in coda. Sto aspettando quella risposta mentre ciclo (vero), ma il problema è se rimuovo "System.out.printline (" foo ");" il ciclo verrà inserito solo una volta !? Con questa linea di syso "forza" mentre il ciclo esegue i loop fino a quando la risposta non viene ricevuta. Cosa c'è che non va qui?
basta mettere vero nel ciclo while, è necessario specificare che cosa deve essere vero. – DrinkJavaCodeJava
Per me, questo suona come una sorta di condizione di gara. Si invoca questo in una discussione che si avvia, giusto? Prova a catturare tutte le eccezioni in questo metodo e stampale. –
Vedere https://stackoverflow.com/questions/25425130/loop-doesnt-see-changed-value-without-a-print-statement – Boann