Почему мой 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"
Любая идея?