使用ExecuterService的多个SwingWorkers无法正常工作
作者:互联网
我正在使用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),那么您应该没有锁定问题.我怀疑问题在于你的代码,但要确保我们应该看到它.
标签:java,swing,executorservice,swingworker 来源: https://codeday.me/bug/20190709/1415629.html