2010-02-03 2 views
1

Для приложений для настольных компьютеров полезно, чтобы при загрузке программы было полезно увидеть стек в графическом интерфейсе. Я реализовал это на Java, заменив System.err своим собственным обработчиком ошибок, который перенаправляет все сообщения об ошибках в компонент GUI и текстовый файл.Java: отображение сбоев в графическом интерфейсе, но подавление предупреждений

Проблема: довольно много библиотек (например, Apache POI) не просто записываются в System.err при возникновении сбоя, но также выводят простые предупреждающие сообщения. Это приводит к тому, что окно сбоя появляется без необходимости. Итак, мой вопрос: кто-нибудь знает, как (1) показать stacktrace при сбое программы, а (2) не показывать его в случае предупреждений?

[Изменить] Мой графический интерфейс написан в SWT.

ответ

2

Вы можете установить собственные обработчики исключений. Один метод для Swing объясняется здесь: http://ruben42.wordpress.com/2009/03/30/catching-all-runtime-exceptions-in-swing/. У Эрика Берка также есть nice article on this topic. Другой общий метод заключается в использовании Thread.setDefaultUncaughtExceptionHandler, который вызывается, когда поток затухает из-за исключения (согласно комментариям в первой ссылке, поток Swing не умирает, поэтому установка обработчика непрозрачных исключений не работает для Swing, но статья Эрика использует это техника).

Ваш обработчик исключений может отображать ошибку, регистрировать ее или делать что угодно, не заботясь о другом коде, используя стандартные потоки вывода/ошибки.

2

Я думаю, что вы приближаетесь к проблеме из-за неправильного угла. Вы должны появляться в диалоговом окне, когда есть исключения, а не только когда в System.err выводится вывод. System.err больше похожа на утилиту регистрации.

Для всех проверенных исключений вы должны обращаться с ними в каждом конкретном случае в своем коде. Либо выведите диалог, запишите их или проигнорируйте их (но в этом случае убедитесь, что это действительно безопасно)

Чтобы поймать любые оставшиеся неисследованные исключения, вы можете сделать что-то вроде этого: http://www.javaspecialists.eu/archive/Issue081.html, чтобы сделать что вы их получите.

Смежные вопросы