Почему мой UncaughtExceptionHandler не перехватывает StackruError?

Я использую Java-демон и хочу перехватывать необработанные исключения. Итак, я написал класс:

public class CodeineUncaughtExceptionHandler 
    implements UncaughtExceptionHandler {

  private Logger log = Logger.getLogger(CodeineUncaughtExceptionHandler.class);
  private boolean errorPrintedToOut = false;

  public CodeineUncaughtExceptionHandler() {
  }

  @Override
  public void uncaughtException(Thread t, Throwable e) {
    try {
      if (!errorPrintedToOut) {
        errorPrintedToOut = true;
        e.printStackTrace();
      }
      log.error("Uncaught exception in thread " + t.getName(), e);
    } catch (Throwable tr) {
      try {
        e.printStackTrace();
        tr.printStackTrace();
      } catch (Throwable e1) {
        log.fatal("could not write stacktrace of exception " + t.getName());
        addExceptionInfo(e1);
        addExceptionInfo(e);
        addExceptionInfo(tr);
      }
    }
  }

  private void addExceptionInfo(Throwable e) {
    log.fatal("exception info " + e.getMessage() + " " + e);
  }
}

и это используется так:

Thread.setDefaultUncaughtExceptionHandler(new CodeineUncaughtExceptionHandler());

По некоторым причинам это, кажется, не работает. Из документации видно, что это должно применяться ко всем потокам. Однако в моем выходном файле отсутствует полная трассировка стека исключения:

Исключение: java.lang.StackruError, выброшенный из UncaughtExceptionHandler в потоке "qtp18824904-18"

Любая идея?

0 ответов

Другие вопросы по тегам