0

正如我的标题所说,我的 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,它工作正常(除了空白JOptionPanes)。此方法是否运行另一个线程?为什么我showInputDialog等待输入而不是这个?

4

1 回答 1

2

SwingUtilities.invokeLater就是这样做的,它将 放置在Runnable稍后运行的事件队列中,这意味着一旦您调用它,您的return语句几乎会在它之后立即执行,并且在将来的某个时间,JOptionPane将显示 。

这种类型的请求被放置在事件队列中,并由事件调度线程处理

看看如何将结果从 EDT 传递回不同的线程?寻求可能的解决方案...

于 2013-10-10T06:10:59.367 回答