EventQueue.invokeLater与SwingUtilities.invokeLater

时间:2012-04-26 12:34:56

标签: java swing awt eventqueue swingutilities

有人可以突出显示这两者之间的差异吗?两者都是必需的?!

我有一个应用程序,它同时使用了一个,但想知道一个是否优于另一个。显然他们都接受Runnable object,所以对我来说 - 我想我可以使用我喜欢的那个。

为什么这两个类似的功能在不同的类中?我知道有一个在awt和另一个Swing,但是他们不做同样的事情吗?

3 个答案:

答案 0 :(得分:12)

SwingUtilities.invokeLater的存在只是因为1.2中引入了EventQueue.invokelater,但是Swing可用于1.1。 JRE中的Swing始终只调用EventQueue版本。 swingall.jar在创建组件时有一些黑客攻击,并在重新绘制时执行了待处理的操作。

invokeLaterEventQueue有关。我建议直接使用该方法。 SwingUtilities只是一个倾销场。我已经看到很多人使用SwingUtilities.invokeLater大概是因为Swing并不依赖于AWT。

答案 1 :(得分:5)

实际上 SwingUtilities#invokeLater(Runnable doRun)的代码是:

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

所以它完全一样!

答案 2 :(得分:4)

如javadoc中所述,它们是相同的,例如来自invokeAndWait方法javadoc

的复制粘贴
  

从1.3开始,这个方法只是java.awt.EventQueue.invokeAndWait()的封面

所以你可以把它们混合起来,你使用哪个版本并不重要。