Как прервать уже запущенный рабочий поток Swing? - PullRequest
2 голосов
/ 24 сентября 2010

Если я запустил поток SwingWorker, вызвав его execute ().Есть ли способ, которым я могу прервать его при его выполнении?

1 Ответ

6 голосов
/ 24 сентября 2010

Если вы управляете кодом 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 в противном случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...