JOptionPane.showConfirmDialog没有停止当前线程

时间:2013-10-10 06:08:15

标签: java swing event-dispatch-thread

正如我的标题所说,每当我打电话时,我的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等待输入而不是这个?

1 个答案:

答案 0 :(得分:2)

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

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

处理

请查看How to pass results from EDT back to a different thread?以获取可能的解决方案......