2

这是 SwingWorker 的文档所说的:
-doInBackground()在工作线程中执行
-process()在事件调度线程 (AWT EDT) 上异步执行。publish()就工作线程中的调用而言,它的执行是不可预测的
-完成done()后在 AWT EDT 中执行doInBackground()

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

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

我所有的测试都表明它done()在最后一个之后运行publish()(这是有道理的,这就是我想要的),但是有没有人看过文档或挖掘代码来验证 SwingWorker 是否旨在保证这种行为?

4

1 回答 1

1

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

publish()不直接调度,它设置一个计时器,该计时器将在之后process触发process()块的调度。EDTDELAY

于 2013-01-04T19:52:10.523 回答