SwingUtilities invokeLater的主要目的

时间:2014-07-27 07:22:28

标签: java swing event-dispatch-thread invokelater swingutilities

我有这段代码

import javax.swing.SwingUtilities;

public class Client1 {

    public static void main( String[] args ) {

        SwingUtilities.invokeLater( new Runnable() {
            public void run() {
                //new MyWindow( "Bayog" );
                new MyWindowV2( "Bayog" );
            }
        } );   
    }
}

如果我不使用SwingUtilities会有什么区别?

1 个答案:

答案 0 :(得分:5)

假设run方法中的代码修改了UI元素。如果您尝试从非UI线程执行该代码,它将失败:所有UI操作必须在UI线程(也称为事件调度线程)中执行。

SwingUtilities.invokeLater允许你说"运行这段代码,但是在UI线程"中执行此操作。因此,对于仍然想要更新UI的后台线程来说,它非常棒。另一种选择是使用SwingWorker,但这并不总是合适的,因为它需要知道"知道"的代码。它需要使用UI线程是设置后台线程的代码。

有关详细信息,请参阅Swing Threading Tutorial