2013-10-18 116 views
2

是什么区别:SwingUtilities.invokeLater和SwingWorker之间的区别<Void,Object>?

//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 
     } 
    }); 

和:

​​

哪种方法更好用?

+0

可能的重复[Java - SwingWorker和SwingUtilities.invokeLater()之间的差异)(http://stackoverflow.com/questions/2829364/java-difference-between-swingworker-and-swingutilities-invokelater) – RamonBoza

回答

15

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

SwingWorker 在非ui线程 - 工作线程中运行主要工作。长时间运行完成后,在ui线程(Event Dispatch Thread)中调用done()方法。

但SwingWorker的doInBackground()方法也可以通过调用publish()方法发布中间结果。 SwingWorker将确保要发布的结果由“事件调度线程”处理。您可以通过执行process()方法来挂钩。

+0

是的,谢谢 :) –

相关问题