2012-04-26 23 views
6

有人可以突出這兩者之間的差異,並且這兩個實例都是必需的嗎?!EventQueue.invokeLater vrs SwingUtilities.invokeLater

我有一個應用程序,它使用兩個interachably,但想知道如果一個比另一個更好。顯然,他們都接受Runnable object,所以對我來說 - 我想我可以使用我喜歡的一個。

爲什麼這兩個類似的函數在不同的類中?我知道一個人在awt和另一個是Swing,但他們不是做同樣的事情嗎?

+1

[SwingUtilities.invokeLater()vs EventQueue.invokeLater()]的可能重複(http://stackoverflow.com/questions/8847083/swingutilities-invokelater-vs-eventqueue-invokelater) – xmedeko 2013-10-15 06:09:34

回答

12

SwingUtilities.invokeLater只存在,因爲EventQueue.invokelater在1.2中引入,但Swing可用於1.1。 JRE中的swing一直稱爲EventQueue版本。 swingall.jar有一些破解,它創建了一個組件,並執行重繪的掛起操作。

invokeLater約爲EventQueue。我建議直接使用該方法。 SwingUtilities只是一個傾倒場。我已經看到很多使用SwingUtilities.invokeLater大概在某種信仰Swing不依賴於AWT。

4

如javadoc中所述,它們是相同的,例如,從invokeAndWait方法的javadoc一個複製粘貼

從1.3版本開始,此方法只對了java.awt.EventQueue.invokeAndWait()覆蓋

所以,你可以將它們混合並不要緊你使用哪個版本。

5

其實SwingUtilities類#的invokeLater(Runnable接口doRun)的代碼是:

public static void invokeLater(Runnable doRun) { 
    EventQueue.invokeLater(doRun); 
} 

所以這是完全一樣的東西!

相關問題