什么是SwingUtilities.invokeLater(new Runnable())

coo*_*oey 1 java swing

谁能用简单的话向我解释这段代码:

SwingUtilities.invokeLater(
    new Runnable(){
        public void run(){
            chatWindow.append(text);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

请任何人给我详细的解释。

Mar*_*nik 7

您正在创建Runnable接口的匿名实现的实例, 并将其传递给invokeLater,这会将其放在队列中。另一个线程(事件调度线程)将Runnables弹出该队列并调用其run方法。(请注意,这确实是一个简单的解释,与现实情况并不完全一致。)

就您作为程序员感兴趣的效果而言,这使得下面的代码行如下:

chatWindow.append(text);
Run Code Online (Sandbox Code Playgroud)

不是在当前线程上执行,而是在事件调度线程(EDT)上执行。如果尝试在当前线程上执行它,则将导致未定义的行为,因为Swing不是线程安全的,并且所有GUI操作都必须在提到的EDT上进行。