Небольшое дополнение к Шемнон с ответом:
В первый раз, когда в EDT возникает необработанное исключение RuntimeException (или Error), он ищет свойство «sun.awt.exception.handler» и пытается загрузить класс, связанный со свойством. Для EDT нужен класс Handler, чтобы иметь конструктор по умолчанию, иначе EDT не будет его использовать.
Если вам нужно внести немного больше динамики в историю обработки, вы вынуждены делать это с помощью статических операций, потому что класс создается в EDT и поэтому не имеет доступа к другим ресурсам, кроме static. Вот код обработчика исключений из используемой нами платформы Swing. Он был написан для Java 1.4 и там работал довольно хорошо:
public class AwtExceptionHandler {
private static final Logger LOGGER = LoggerFactory.getLogger(AwtExceptionHandler.class);
private static List exceptionHandlerList = new LinkedList();
/**
* WARNING: Don't change the signature of this method!
*/
public void handle(Throwable throwable) {
if (exceptionHandlerList.isEmpty()) {
LOGGER.error("Uncatched Throwable detected", throwable);
} else {
delegate(new ExceptionEvent(throwable));
}
}
private void delegate(ExceptionEvent event) {
for (Iterator handlerIterator = exceptionHandlerList.iterator(); handlerIterator.hasNext();) {
IExceptionHandler handler = (IExceptionHandler) handlerIterator.next();
try {
handler.handleException(event);
if (event.isConsumed()) {
break;
}
} catch (Throwable e) {
LOGGER.error("Error while running exception handler: " + handler, e);
}
}
}
public static void addErrorHandler(IExceptionHandler exceptionHandler) {
exceptionHandlerList.add(exceptionHandler);
}
public static void removeErrorHandler(IExceptionHandler exceptionHandler) {
exceptionHandlerList.remove(exceptionHandler);
}
}
Надеюсь, это поможет.