У меня есть библиотека Java, которая запускает ряд задач. И я зарегистрировал обработчик по умолчанию перехватывается исключение, используя:Java UncaughtExceptionHandler не имеет никакого исключения, используя JNI
Thread.setDefaultUncaughtExceptionHandler(new JavaUncaughtExceptionHandler());
UncaughtExceptionHandler реализует UncaughtExceptionHandler
и только информация журнала об ошибках в STDERR
.
Моя библиотека Java вызывается через JNI из кода C++, а JNI вызывает ее ExceptionCheck()
и регистрирует ошибку как FATAL на C++.
Проблема заключается в том:
В среде выполнения, когда есть RuntimeException
(или любое другое неперехваченное исключение) происходит в моем Java коде, ошибка была захвачена в C++ вместо моего JavaUncaughtExceptionHandler
зарегистрирован как поток по умолчанию обработчик неперехваченных исключений ,
- Это разве что поведение?
- Когда будет вызван
DefaultUncaughtExceptionHandler
? Я знаю, что до того, как потоки отключились, но когда конкретно в деле JNI. Это вызвано до возвращения на C++ или после завершения кода C++). Я думаю, что это связано с управлением потоками в JNI, пожалуйста, поделитесь любой связанной информацией. - Есть в любом случае я могу поймать все исключения в моем Java коде (другой альтернативный пути, кроме положить
try
/catch
блоков)
Спасибо так много.
Джеймс, спасибо за ваше разъяснение, очень полезно. Мы вызываем Java-метод, используя метод jenv.CheckException (...), и исключение записывается в C++. Поэтому я считаю, что код безопасен для запуска, но мы просто хотим регистрировать все исключения в Java вместо C. Однако, похоже, это не может быть достигнуто UncaughtExceptionHandler. – user788767