加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 02:33:37 所属栏目:Java 来源:网络整理
导读:我正在使用swing并且在我的应用程序中我需要并行运行多个线程,例如每隔5秒检查一次互联网连接,监视文件系统更改,从服务器协调文件. 上面所有耗时的任务都在SwingWorker中运行,因此我的GUI不应该冻结. 同时我需要运行一些其他耗时的任务,例如将文件上传到服务
我正在使用swing并且在我的应用程序中我需要并行运行多个线程,例如每隔5秒检查一次互联网连接,监视文件系统更改,从服务器协调文件.

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

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

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

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

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

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

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

有没有办法拥有像摇摆工作者一样的功能,或者使用多个摆动工具的一些最佳方式.我们应该能够在运行时添加新的swingwokers到执行服务

解决方法

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

如果您通常遵循在EDT中访问Swing组件表单的规则(查看here),那么您应该没有锁定问题.我怀疑问题在于你的代码,但要确保我们应该看到它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读