2013-10-18 45 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

是的,謝謝 :) –

相關問題