正如我的标题所说,每当我打电话时,我的showConfirmDialog都不会等待按“是”或“否”按钮。
最初我遇到了一个让我空白JOptionPanes
的错误,所以现在我正在使用invokeLater
方法。我不太熟悉这个概念所以我事先道歉。
public int firstGame()
{
SwingUtilities.invokeLater(new Runnable() {
public void run() {
yOrN = JOptionPane.showConfirmDialog(null,
"Are you ready to play?\n", "Play?", JOptionPane.YES_NO_OPTION);
}
});
return yOrN;
// will return 0 if yes and 1 if no.
}
在使用invokeLater
之前,它工作正常(空白JOptionPane
除外)。这个方法是否运行另一个线程?如果我的showInputDialog
等待输入而不是这个?
答案 0 :(得分:2)
SwingUtilities.invokeLater
就是这样,它将Runnable
置于事件队列中以便稍后运行,这意味着一旦你调用它,你的return
语句几乎会在它之后立即执行。将来的某个时间,将显示JOptionPane
。
此类型的请求被放置在事件队列中,并由事件调度线程
处理请查看How to pass results from EDT back to a different thread?以获取可能的解决方案......