一次中断更多的SwingWorkers

时间:2014-03-14 00:57:08

标签: swingworker

所以我目前正在从Executer运行3个SwingWorkers:

  1. 使用htmlunit从网站收集信息,如果添加了新内容,则会在GUI中的表格中显示并发送给已连接的客户端
  2. 等待客户端连接,如果客户端连接,则将其添加到已连接客户端表
  3. 如果他仍处于活动状态,则通过向客户端发送数据来检查每10秒,并根据此更新已连接客户端的表
  4. 主要问题是如果其中一个SwingWorkers被中断(例如由于某些异常或错误)并且结束其他2也应该结束,因为它们将毫无意义地单独运行。

    我将这部分代码添加到每个SwingWorker done()函数中:

    synchronized(lock)
    {
       try{
           for (int i = 0; i < threads.size(); i++) {
                try{
                    if (threads.get(i)!=null && threads.get(i)!=this){
    
                          threads.get(i).cancel(true);
    
                    }
                } catch (java.lang.NullPointerException ex) {
    
                }
              }
       } catch (java.lang.NullPointerException ex) {
    
       }
    }
    

    如果线程是摇摆工作者的arraylist,我应该马上结束

    此解决方案对我有用,但我想知道是否还有其他更好的解决方案?

1 个答案:

答案 0 :(得分:0)

如何创建一个全局布尔变量并将其用作所有SwingWorkers中的标志?

当该标志为false时,每个SwingWorker将退出该进程..(通常这就是你如何结束线程..)

修改: 这就是我的意思..不是很漂亮,但可能适合你的需要..

protected Integer doInBackground() throws Exception {
    publish("Start..");
    setProgress(1);

    if(!flag) return -1;
    publish("Done more work..");
    setProgress(10);

    if(!flag) return -1;
    publish("Done more work again..");
    setProgress(30);

    // Completed
    publish("Completed..");
    setProgress(100);
    return 1;
}