Ern*_*dis 3 java swing multithreading swingworker invokelater
有什么区别:
//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
}
});
Run Code Online (Sandbox Code Playgroud)
和:
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();
Run Code Online (Sandbox Code Playgroud)
哪种方法更好用?
Ren*_*ink 15
SwingUtilities.invokeLater
获取Runnable并稍后在ui线程中调用它.通常用于短期运行ui的相关工作.
SwingWorker
在非ui线程中运行主要工作 - 工作线程.在长时间运行的工作完成后done(),在ui线程(事件调度线程)中调用该方法.
但SwingWorker的doInBackground()方法也可以通过调用publish()方法发布中间结果.该SwingWorker会比确保结果发布在事件指派线程进行处理.您可以通过实现该process()方法来实现.
| 归档时间: |
|
| 查看次数: |
2295 次 |
| 最近记录: |