我正在使用SwingWorker在我正在制作的应用程序上执行一些重载任务。虽然今天我遇到了Executor类和这个例子:
Executors.newCachedThreadPool().execute(new Runnable() {
public void run() {
someTask();
});
有人可以解释为什么会使用SwingWorker而不是上面的例子吗?这是我目前使用SwingWorker的方式:
SwingWorker worker = new SwingWorker() {
protected Object doInBackground() {
someTask();
return null;
}
};
worker.execute();
答案 0 :(得分:7)
1)SwingWorker
创建为实现Java Essentials Classes
之间的桥梁Future
和Swing之间的桥梁,并且完全保证方法process
,publish
和{的outoput {1}}将在done
2)您可以从EventDispatchThread
调用SwingWorker
,这是最安全的方法,如何通过工具Executor
创建multithreading in Swing
3)仔细注意数字或线程,因为SwingWorker
并不关心Executor
life_cycle
5)对于来自SwingWorkers
的收听状态,您必须实施SwingWorker
答案 1 :(得分:6)
SwingWorker
有其他方法process()
和done()
,它们会在事件派发线程中自动执行。如果您打算在用户界面中显示进度或最终结果,这会派上用场。