是否保证在工作人员最后一次调用SwingWorker.process()之后执行SwingWorker.done()?

时间:2013-01-03 21:02:33

标签: swingworker

以下是SwingWorker的文档说明:
- doInBackground()在工作线程中执行 - process()在Event Dispatch线程(AWT EDT)上异步执行。对于在工作线程中对publish()的调用,它的执行是不可预测的 - done()doInBackground()完成后

在AWT EDT中执行process()

我看不到任何说明done()的最后一次调用总是publish()之前执行(它们都在同一个线程上运行)。

我有来自doInBackground()的多次process()来电;已发布的对象在done()中被选中,并用于使用进度报告更新GUI。对文档的字面解释可能意味着process()done()的最后一次执行之前在EDT上安排可能,因为process()是有保证的在工作线程之后执行,但done()被记录为不可预测。

我的所有测试都显示publish()在最后{{1}}之后运行(这是有道理的,这就是我想要的),但是有人看过文档或挖掘代码以验证SwingWorker是否设计好保证这种行为?

1 个答案:

答案 0 :(得分:1)

答案是否定的。请参阅下面链接的DSquare答案。

  

publish()没有直接安排process,它会设置一个计时器   将在process()之后触发EDTDELAY块的日程安排。