gpt4 book ai didi

Java - SwingWorker - 问题

转载 作者:行者123 更新时间:2023-11-29 09:31:19 24 4
gpt4 key购买 nike

我正在开发 Java 桌面应用程序。此应用程序执行相同的任务 public class MyTask implements Callable<MyObject> {同时在多个线程中。

现在,当用户点击“开始”按钮时,我创建了一个 SwingWorker myWorker并执行了它。

现在,这个 myWorker创建 MyTask 的多个实例并将它们提交给 ExecutorService .

每个MyTask instance 有一个循环,并在每次迭代时生成一个中间结果。现在,我想从每个 MyTask 中收集这些中间结果。实例一旦生成。然后在从每个 MyTask 中收集这些中间结果之后例如,我想通过 SwingWorker.publish(MyObject) 发布它以便在 EDT 上显示进度。

Q1. 我该如何实现?我应该做 MyTask SwingWorker 的子类而不是 Callable也可以得到中间结果,因为我认为 Callable只返回最终结果。

Q2. 如Q1的答案。是的,那么你能给我一个小例子来说明我如何获得这些中间结果并汇总它们,然后从 main SwingWorker 发布它们吗? ?

Q3. 如果我不能使用 SwingWorker在这种情况下,我该如何实现呢?

最佳答案

看看ExecutorCompletionService<T> .它是一个 Executor,它提供 take 方法来检索任何已完成任务的结果。

更新:

扩展 SwingWorker 不会执行您想要的操作,因为它专门用于将工作从 EDT 卸载到后台线程。您不能使用它来将工作从后台线程卸载到其他后台线程。调用 SwingWorker.publish 的结果等同于 SwingUtilities.invokeLater。我不知道有什么机制可以从后台线程到后台线程做同样的事情。您最好的选择是创建您的 MyTask 并引用 Queue 并让您的 SwingWorker.doInBackground 轮询队列以获取中间结果。

关于Java - SwingWorker - 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2793121/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com