【发布时间】:2013-09-03 07:47:33
【问题描述】:
SwingWorker中的这两个方法目前让我很困惑,而且好像很容易误用。
方法publish()描述如下:
将数据块发送到 process(java.util.List) 方法。此方法用于在 doInBackground 方法内部传递中间结果,以便在 process 方法内部的 Event Dispatch Thread 上进行处理。
这对我来说意味着当我的工作线程正在执行它的doInBackground() 方法时,我能够创建“块”(这些应该是特定的,还是只是一种引用消息对象的方式?),然后将它们发布到我的 Swing GUI 上进行处理。
这将我引向process()。 javadoc 概述了以下内容:
在事件调度线程上从发布方法异步接收数据块。
查看了这两种方法的文档后,任何人都可以澄清这是如何发生的背后的机制吗?我知道根据文档,这是一个异步过程,但由于它发生在 EDT 上,我认为它具有一定的可预测性。
publish() 文档指出:
因为进程方法是在事件调度线程上异步调用的,所以在执行进程方法之前可能会多次调用发布方法。出于性能目的,所有这些调用都合并为一个带有串联参数的调用。
总而言之,我的问题有两个:
- 谁应该打电话给
process()? -
process()在 SwingWorker 和 EDT 的上下文中的工作流程是什么?
如果需要任何澄清,请告诉我。
【问题讨论】:
-
process()是一个回调。你不需要调用它。process()由库在 EDT 中调用。
标签: java swing swingworker