2013-10-10 92 views
0

正如我在標題中所說的,我的showConfirmDialog從不等待按下「Yes」或「No」按鈕,只要我叫它。JOptionPane.showConfirmDialog不會停止當前線程

本來我遇到了一個bug讓我變得空白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 S)。此方法是否運行另一個線程?我的showInputDialog如何等待輸入,而不是這個?

+0

不明白,它的有關標準,要求將JOptionPane包裝到invokeLater中, – mKorbel

回答

2

SwingUtilities.invokeLater做到了這一點,它把Runnable到事件隊列稍後運行,這意味着一旦你叫吧,你return聲明幾乎立即後執行,並在未來的一段時間內,JOptionPane將顯示。這種類型的

請求被放置在事件隊列和由事件調度線程過程

看一看How to pass results from EDT back to a different thread?一個可能的解決方案...

+0

謝謝你的簡潔解釋!並且廢話的解決方案已經超出了我迄今爲止所瞭解的範圍。我會看看它。再次感謝! – kir

+0

我已經這麼做了14年,'Future'仍然讓我感到恐慌:P ...整潔的解決方案,雖然 – MadProgrammer

+0

@MadProgrammer +1 for isEventDispatch ...,另一方面談論sceleton及其通知器是錯誤的設計,沒有想法如何創建由OP引起的代碼示例... – mKorbel