2013-02-26 28 views
1

這是一個關於swing實用程序中invokeAndWait事情的非常簡單的問題。我聽說它在一個線程上同步代碼執行,但我不確定。如果是這樣,我應該使用invokeAndWait來做到這一點?Java invokeAndWait?

+1

像往常一樣,API告訴你需要知道什麼和更多。請看一看:[SwingUtilities#invokeAndWait](http://docs.oracle.com/javase/7/docs/api/javax/swing/SwingUtilities.html#invokeAndWait(java.lang.Runnable)) – 2013-02-26 03:21:19

回答

3

SwingUtilities.invokeAndWait(Runnable)會將事件隊列中的Runnable排入隊列。這將允許事件調度線程在事件調度線程的上下文中執行Runnablerun方法。

invokeAndWait直到EDT完成執行run方法後纔會返回。這意味着這是一個阻止操作。

invokeAndWait用於將代碼重新同步到EDT,允許它在Swing工具包中執行對UI的更新。

除非您試圖讓您的代碼在EDT上執行,否則不應將其用於線程同步。

+1

最重要的是invokeAndWait引起異常,如果是EDT存在且非空,則必須在使用前測試isEventDispatchThread – mKorbel 2013-02-26 07:46:41