如何中止已经开始的摇摆工作线程?

时间:2010-09-24 07:19:04

标签: java swing

如果我通过调用其execute()启动了SwingWorker线程。有什么方法可以在执行时打断它吗?

1 个答案:

答案 0 :(得分:6)

如果您控制SwingWorker的代码,则可以在isCancelled()中的适当位置轮询doInBackground(),然后在返回true时停止工作。然后当你感觉到时cancel工人:

class YourWorker extends SwingWorker<Foo, Bar> {

    // ...

    protected Foo doInBackground() throws Exception {
        while (someCondition) {
            publish(doSomeIntermediateWork());
            if (isCancelled())
                return null; // we're cancelled, abort work
        }
        return calculateFinalResult();
    }

}

// To abort the task:
YourWorker worker = new YourWorker(args);
worker.execute();
doSomeOtherStuff();
if (weWantToCancel)
    worker.cancel(false); // or true, doesn't matter to us here

现在,正如您所说,cancel(boolean)可能会失败,但为什么? Javadocs告知我们:

  

返回:

     

false如果任务无法取消,通常是因为它已经正常完成;否则true