SwingWorker在完成doInBackground()之前执行done()

时间:2016-11-01 17:32:19

标签: java multithreading swingworker

我一直在读这个,从这些帖子中,我知道我可能是一个错误

SwingWorker, done() is executed before process() calls are finished

The proper way to handle exceptions thrown by the SwingWorker.doInBackground

但是在我的情况下,没有任何东西可以调用done方法。这就是我的工作人员的工作方式。

public static class collectingWorker extends SwingWorker<Void, Void> { 


    collectingWorker(String name) {
        //initialize
        threadName = name; 
    }

    @Override
    public Void doInBackground() {    

        loop = true;   
        while(loop){  
            //Code goes here
        }
        return null;
    }  

    @Override
    protected void done() {
        System.out.println("loop: " + loop);
        System.out.println("Collecting worker DONE");
        try {
            get();
        } catch (CancellationException x) {
            System.out.println("Cancelation");
            // ...
        } catch (InterruptedException x) {
            System.out.println("Interruption");
            // ...
        } catch (ExecutionException x) {
            System.out.println("Execution");
            System.out.println(x.getMessage());
            System.out.println(x.getCause());
            // ...
        }
    }
} 

在另一个线程上,我有一个计数器,在将循环设置为false之前等待x分钟。我看到的是,collectiveWorker done方法在它应该等待的x分钟之前执行,更糟糕的是,它完全是随机的,有时它可以工作,有时它在3分钟后失败,有时在90分钟后失败。< / p>

这就是我从done方法中得到的东西,正如你所看到的,布尔&#34;循环&#34;永远不会设置为假

loop: true
Collecting worker DONE
Execution
java.util.NoSuchElementException
java.util.NoSuchElementException

任何想法或解决方法?

1 个答案:

答案 0 :(得分:0)

嵌套在while(循环)中的逻辑抛出NoSuchElementException,导致整个doInBackground()方法过早退出。