使用ExecuterService的多个SwingWorkers无法正常工作

时间:2012-04-23 13:09:59

标签: java swing swingworker executorservice

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

上述所有耗时的任务都在 SwingWorker 中运行,因此我的GUI不应该冻结。

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

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

  1. SwingWorker使用它自己的ThreadPool。
  2. SwingWorker应该用于长时间运行的任务之后(即任何需要超过几毫秒的任务),之后需要进行GUI更新。
  3. 不应该在EDT之外调用更新gui元素(即从SwingWorker.done()方法)
  4. 如果您通常遵循在EDT中访问Swing组件表单的规则(查看here),那么您应该没有锁定问题。我怀疑问题在于你的代码,但要确保我们应该看到它。