以下是SwingWorker的文档说明:
- doInBackground()
在工作线程中执行
- process()
在Event Dispatch线程(AWT EDT)上异步执行。对于在工作线程中对publish()
的调用,它的执行是不可预测的
- done()
在doInBackground()
完成后
process()
我看不到任何说明done()
的最后一次调用总是在publish()
之前执行(它们都在同一个线程上运行)。
我有来自doInBackground()
的多次process()
来电;已发布的对象在done()
中被选中,并用于使用进度报告更新GUI。对文档的字面解释可能意味着process()
在done()
的最后一次执行之前在EDT上安排可能,因为process()
是有保证的在工作线程之后执行,但done()
被记录为不可预测。
我的所有测试都显示publish()
在最后{{1}}之后运行(这是有道理的,这就是我想要的),但是有人看过文档或挖掘代码以验证SwingWorker是否设计好保证这种行为?
答案 0 :(得分:1)
答案是否定的。请参阅下面链接的DSquare答案。
publish()
没有直接安排process
,它会设置一个计时器 将在process()
之后触发EDT
中DELAY
块的日程安排。