Если вы управляете кодом SwingWorker, вы можете опросить isCancelled()
в соответствующих местах в doInBackground()
, а затем прекратить работу, если он вернет true
. Затем отмените работника, когда вам захочется:
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
в противном случае.