1

我有这个代码片段

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 有什么区别?

4

1 回答 1

5

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

SwingUtilities.invokeLater允许您说“运行这段代码,但在 UI 线程中这样做”。因此,它非常适合仍想更新 UI 的后台线程。另一种选择是使用SwingWorker,但这并不总是合适的,因为它要求“知道”它需要使用 UI 线程的代码是设置后台线程的代码。

有关更多详细信息,请参阅Swing 线程教程

于 2014-07-27T07:25:35.830 回答