使用SwingUtilities.invokeLater()在线程中启动GUI有什么好处

时间:2014-01-23 22:12:43

标签: java multithreading swing

大家好我看过Swing GUI正在推出这样的

public class Main {

public static void main(String args[]){
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            // TODO Auto-generated method stub
            new Gui();
        }

    });

}

}

以这种方式启动它有什么好处?

2 个答案:

答案 0 :(得分:5)

不仅仅是好处,我想说这是必要的,因为大多数Swing组件都不是线程安全的。 invokeLater将在Swing事件调度线程内运行任务,避免线程干扰或内存一致性错误。

您可以在Swing Tutorial, Event Dispatch Thread chapter中找到它。

答案 1 :(得分:4)

Swing是单线程的。您需要将GUI更改排队到swing事件派发线程。这不是一个优势,而是一项要求。否则,行为未定义。

http://docs.oracle.com/javase/tutorial/uiswing/concurrency/dispatch.html