while(true) ループの奇妙な動作があります。コードは次のとおりです。
クラスのメンバーとして私は持っています:
static Queue<Object> response = new LinkedList<Object>();
... そして関数:
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;
}
}
}
}
オブジェクトがサーバーから (Socket 経由で) 受信されると、InputController クラスはそのオブジェクトを適切なコントローラー (この場合は MasterLogInController) に渡し、Queue 応答に入れます。while(true) ループでその応答を待っていますが、「System.out.printline("foo");」を削除すると問題が発生します。ループは一度だけ入ります!? この syso 行を使用して、応答が受信されるまでループを実行するように while ループを「強制」します。ここで何が問題なのですか?