SwingUtilities.invokeLater与SwingWorker 之间的区别?

有什么区别:

//Some code, takes a bit of time to process (new SomeJFrame()).setVisible(true); SwingUtilities.invokeLater(new Runnable() { @Override public void run() { (new SomeJWindow()).start();//Start a new thread } }); 

和:

  class doGraphics extends SwingWorker { @Override public Void doInBackground() { //Some code, takes a bit of time to process (new SomeJFrame()).setVisible(true); return null; } @Override protected void done() { (new SomeJWindow()).start();//Start a new thread } } (new doGraphics()).execute(); 

哪种方法更好用?

SwingUtilities.invokeLater接受一个Runnable并稍后在ui线程中调用它。 通常用于短期运行ui的相关工作。

SwingWorker在非ui线程中运行主要工作 – 工作线程。 在长时间运行的工作完成后,在ui线程(事件调度线程)中调用done()方法。

但是SwingWorker的doInBackground()方法也可以通过调用publish()方法发布中间结果。 SwingWorker将确保发布的结果由Event Dispatch Thread处理。 您可以通过实现process()方法来挂钩。