gpt4 book ai didi

java - 带有 ExecuterService 的多个 SwingWorker 无法正常工作

转载 作者:搜寻专家 更新时间:2023-11-01 03:42:52 26 4
gpt4 key购买 nike

我正在使用 swing,在我的应用程序中我需要并行运行多个线程,例如每 5 秒检查一次互联网连接、监控文件系统更改、从服务器sycing 文件。

所有像上面这样的耗时任务都在 SwingWorker 中运行,这样我的 GUI 就不会卡住。

同时我需要运行一些其他耗时的任务,例如将文件上传到服务器。为此,我还使用了 swingWorker。然后我将所有这些 swingworker 提交给 executerService 进行线程池,这样它们就不会相互影响。

我的executer服务是这样的。我认为 30 个线程对我来说就足够了。

static ExecutorService threadExecutor;
threadExecutor = Executors.newFixedThreadPool(30);

然后我在同一服务中提交线程。

threadExecutor.submit(monitorinternetconnectivity); //submitting swingworker obejct

我在开始时提交的一些线程和一些我在运行时添加的线程,当我在运行时添加时,它不会完成作业或停止运行它们的作业,比如监控互联网连接。

有没有什么方法可以像 swing worker 一样拥有相同的功能,或者使用多个 swingworker 的最佳方法。我们应该能够在运行时将新的 swingwokers 添加到 executer 服务

最佳答案

  1. SwingWorker 使用它自己的线程池。
  2. SwingWorker 应该用于长时间运行的任务(即任何需要超过几毫秒的任务),之后需要更新 GUI。
  3. 不应在 EDT 之外调用更新 gui 元素(即从 SwingWorker.done() 方法)

如果您通常遵循在 EDT 中访问 Swing 组件表单的规则(参见 here),那么您应该不会遇到锁定问题。我怀疑问题出在您的代码中,但为了确保我们应该看到它。

关于java - 带有 ExecuterService 的多个 SwingWorker 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10281185/

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