6

有人可以强调这两者之间的差异以及两者都是必需的实例吗?!

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

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

4

3 回答 3

14

SwingUtilities.invokeLater存在只是因为EventQueue.invokelater在 1.2 中引入,但 Swing 可用于 1.1。Swing 在 JRE 中一直只调用EventQueue版本。swingall.jar在创建组件并在重绘时执行挂起的操作时进行了一些破解。

invokeLater是关于EventQueue。我建议直接使用该方法。SwingUtilities只是一个垃圾场。我已经看到很多使用SwingUtilities.invokeLater大概是在某种信念摇摆不依赖于 AWT。

于 2012-04-26T12:43:07.577 回答
5

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

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

所以这完全一样!

于 2012-04-26T12:40:24.903 回答
4

As described in the javadoc, they are the same, e.g. a copy-paste from the invokeAndWait method javadoc

As of 1.3 this method is just a cover for java.awt.EventQueue.invokeAndWait()

So you can mix them and it does not matter which version you use.

于 2012-04-26T12:38:19.653 回答