Ловить исключения из других потоков? - PullRequest
2 голосов
/ 11 ноября 2011

Я пишу приложение, которое будет использовать несколько потоков.Существует основной поток, который запускает другие потоки.Я хочу сообщить, что когда один из запущенных потоков выдает исключение, основной поток должен прекратить запуск потоков.Это выглядит примерно так:

class SomeClass {
boolean launchNewThread = true;
public static void main() {
    while (launchNewThread) {
        try {
            AnotherClass.run();
        } catch (CrossThreadException e) {
            launchNewThread = false;
        }
    }
}
}

class AnotherClass implements Runnable {
    public void run() {
        if (a=0) throw new CrossThreadException();
}

}

Ответы [ 2 ]

10 голосов
/ 11 ноября 2011

Вы должны сделать это сами - перехватить исключение и каким-то образом передать его в поток запуска.

Кроме того, существует концепция Future , которая это уже делает.Вы должны запустить свои потоки как фьючерсы и проверить isDone() и поймать ExecutionException из get(), это исключение будет сгенерировано, если будущая задача выдает исключение.

4 голосов
/ 11 ноября 2011

Вы также можете использовать слушателя, как описано в Как вызвать проверенное исключение из потока Java?

Когда в одном из дочерних потоков создается исключение, вы можете вызвать метод, подобный listener.setLaunchNewThread(false), из дочернего потока, который изменит значение вашего логического флага в родительском потоке.

Что касается примечания, вызов AnotherClass.run() не запускает новый поток, а вызывает только метод run из AnotherClass в том же потоке. Вместо этого используйте new Thread(new AnotherClass()).start().

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