SwingWorker
用于以下目的的区别:爪哇 - SwingWorker类和SwingUtilities.invokeLater()
- 对于在不同的线程中运行长时间运行的任务,以防止从GUI不响应
- 对于具有通过在任务通过
done()
方法结束时的长时间运行的任务产生的结果更新GUI。 - 对于具有产生并通过用
publish()
和process()
方法的帮助下,任务公布的中间结果不时更新GUI时间。
SwingUtilities.invokeLater()
可以如下执行上述任务:
- 而不是从EDT执行
SwingWorker.execute()
的方法,我们可以执行ExecutorService.submit(new MyRunnable())
,因为它也将创造另一个线程可以执行长时间运行的任务。 - 对于在任务结束时更新GUI,我们可以在任务结束时把代码(写在情形1的
done()
方法)SwingUtilites.invokeLater(new RunnableToExecuteDoneMethodCode())
。 - 为了在任务中更新GUI,我们可以在case1中的方法
publish()
方法中放置代码(写在case1的process()
方法中)SwingUtilites.invokeLater(new RunnableToExecuteProcessMethodCode())
。
我问这个问题,因为问题Java - SwingWorker - Can we call one SwingWorker from other SwingWorker instead of EDT规定的问题可以通过SwingUtilities.invokeLater()
来解决,但不能与SwingWorker
我不太清楚 '问题' 是什么。 – akf 2010-05-13 19:11:09
@akf如果你不确定,那就离开吧。简单:) – 2010-05-13 19:19:59
您引用的问题可以通过使用SwingWorker解决。在那里看到我的答案。 – 2010-05-13 19:45:43