EventQueue.invokeLater vrs SwingUtilities.invokeLa

2019-06-19 12:14发布

Can someone highlight on the differences between these two and the instances both are required?!

I have an application which uses both intercheably, but want to know if one is better than the other. Obviously they both accept Runnable object, and so for me - I think I can use which one I like.

Why these two similar functions in different classes? I know one is in awt and the other Swing, but don't they do the same thing?

3条回答
我想做一个坏孩纸
2楼-- · 2019-06-19 12:31

Actually the code of SwingUtilities#invokeLater(Runnable doRun) is :

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

So it's exactly the same thing!

查看更多
Ridiculous、
3楼-- · 2019-06-19 12:35

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.

查看更多
Deceive 欺骗
4楼-- · 2019-06-19 12:40

SwingUtilities.invokeLater exists only because EventQueue.invokelater was introduced in 1.2, but Swing was available for 1.1. Swing in the JRE has always just called the EventQueue version. swingall.jar had some hack where it created a component, and executed pending operations on repaints.

invokeLater is about the EventQueue. I suggest using the method directly. SwingUtilities is just a dumping ground. I have seen a lot using SwingUtilities.invokeLater presumably in some kind of belief the Swing isn't dependent upon AWT.

查看更多
登录 后发表回答