有什么区别:
//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<Void, Object> {
@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();
哪种方法更好用?
答案 0 :(得分:15)
<强> SwingUtilities.invokeLater
强>
获取Runnable并稍后在ui线程中调用它。通常用于短期运行ui相关工作。
<强> SwingWorker
强>
在非ui线程中运行主要工作 - 工作线程。在长时间运行的工作完成后,在ui线程(事件调度线程)中调用done()
方法。
但SwingWorker的doInBackground()
方法也可以通过调用publish()
方法发布中间结果。 SwingWorker
将确保发布的结果由Event Dispatch Thread处理。您可以通过实施process()
方法来实现。