Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Как сбросить поток ошибок.


Автор: boraldo 19.12.2008, 15:18
У меня многопоточная программа. Каждый поток имеет метод run такого типа :

try {
int a = 1 / 0;
} finally {
System.exit(0);
}

В блоке try я выполняю действия (конечно не 1\0). Потоки таковы, что просто сам по себе он никогда не остановится. В случае возникновения ошибки я хочу, чтобы ошибка распечаталась в консоль, как обычно, а после этого все остальные потоки (thread) закрылись. Закрытие потоков я делаю методом System.exit(0);

Итак, вопрос.
Почему при выполнении такого кода ошибка не попадает в консоль?
Как это исправить?

Скажу сразу, что я не хочу добавлять catch(RuntimeException re) ибо считаю это порнографией.

Автор: rygel 19.12.2008, 15:29
System.exit терминейтит виртуальную машину до того как она успевает распечатать стектрейс. почему бы явно в finally не распечатать ошибку?

Автор: AxNe0 19.12.2008, 16:22
rygel, чтобы в finally распечатать трейс, надо его откуда-то получить ;) а получить неоткуда.


boraldo, а что порнографического в таком catch'e ? в принципе RuntimeException'ы - это в большинстве случаев косяки кода, и уж если они случаются, то это гораздо более порнографическое  smile 
А если по делу, предлагаю в catch блоке выводить stacktrace, бросать какой-то checked exception, а в потоке main его перехватывать и завершать работу как душе угодно

Автор: rygel 19.12.2008, 16:34
smile))) да... это я сморозил конечно..

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)