SwingUtilities invokeLater的主要目的

我有这段代码

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

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

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

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