我正在寫一個基於回合的互聯網遊戲。我嘗試彈出一個應該在前面的窗口,直到輸入流準備就緒。我創造了這樣的行爲,但它似乎不起作用。使用SwingUtilities.invokeLater彈出窗口
class CustomBlockerDialog extends JDialog {
/**
*
*/
private static final long serialVersionUID = 1L;
public CustomBlockerDialog(Frame owner, String text) {
super(owner, true);
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
setSize(300, 100); // Adjust if needed
setTitle("");
add(new JLabel(text, SwingConstants.CENTER));
}
}
final CustomBlockerDialog block = new CustomBlockerDialog(null, "Not your turn");
SwingUtilities.invokeLater(new Runnable() {//A
@Override
public void run() {
System.out.println("show");
block.setVisible(true);
}
});
boolean one_write_only = true;
while(in.ready()){ /* C*/
if(one_write_only){
System.out.println("waiting server");
one_write_only = false;
}
};
System.out.println("suppose to hide");
SwingUtilities.invokeLater(new Runnable() {//B
@Override
public void run() {
System.out.println("hide");
block.setVisible(false);
}
});
看起來「A」和「B」在「C」之後執行,我不知道爲什麼。
............你好??? –
對不起,很久沒有發帖了。我記得它,但我有很多工作。 – slawic