使用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),那么您应该没有锁定问题.我怀疑问题在于你的代码,但要确保我们应该看到它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |