具有执行器服务的多个 SwingWorker 无法正常工作



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

像上面这样耗时的所有任务都在SwingWorker运行,所以我的 GUI 不应该冻结。

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

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

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

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

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

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

有没有办法像秋千工人一样具有相同的功能,或者使用多个秋千工人的最佳方法。 我们应该能够在运行时添加新的 Swingwokerexecuter服务

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

如果您通常遵循访问 EDT 内部 Swing 组件表单的规则(查看此处),那么您应该不会有锁定问题。我怀疑问题出在您的代码中,但为了确保这一点,我们应该看到它。

相关内容

  • 没有找到相关文章

最新更新