2012-03-30 75 views
1

我在swing中編寫我的代碼。啓動另一個可以在awt線程中調用的類的私有函數。我只需在SwingUtilities.invokeLater線程中將該函數的代碼寫入我的課程中。線程沒有從SwingUtilities.invokeLater返回到主線程

main() { 

    SwingUtilities.invokeLater(new Runnable() { 

     //code of private function 

    }); 

} 

但在執行此控件後不會回到主線程。任何人都可以建議發生了什麼以及如何解決這個問題?

回答

3

SwingUtilities.invokeLater不會阻塞當前線程的執行。如果相信它,你可以簡單地做

System.out.println("Before"); 

SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      //code of private function 
     } 
    }); 

System.out.println("After"); 

,你會看到BeforeAfter之後彼此或多或少立即打印。

(請確保您有不小心使用SwingUtilities.invokeAndWait。)

1

SwingUtilities.invokeLater(Runnable)將執行在EDT的代碼,你已經正確地指出。 main線程在invokeLater的調用之後繼續執行。如果您在調試器中執行程序並在EDT中執行的代碼中某處存在斷點,您可能看不到主線程,但執行線程時肯定會執行該線程。