일련의 작업을 실행하는 Java 라이브러리가 있습니다.Java UncaughtExceptionHandler가 JNI를 사용하여 예외를 가지고 있지 않음
Thread.setDefaultUncaughtExceptionHandler(new JavaUncaughtExceptionHandler());
수 있던 uncaughtExceptionHandler는 UncaughtExceptionHandler
구현 만 STDERR
에 오류 정보를 로그 : 그리고 내가 사용하는 기본 캐치되지 않는 예외 핸들러를 등록했다.
Java 라이브러리는 C++ 코드에서 JNI를 통해 호출되며 JNI는 ExceptionCheck()
으로 호출하고 C++에서 FATAL로 오류를 기록합니다.
문제는 : 런타임에서
하는 RuntimeException
(또는 다른 캐치되지 않는 예외), 오류가 C++에서 캡처있어 내 자바 코드에서 일어나는있을 때 대신 스레드 기본 캐치되지 않는 예외 핸들러로 등록 내 JavaUncaughtExceptionHandler
의 .
- 예외가 있습니까?
- 실제로 언제
DefaultUncaughtExceptionHandler
이 호출 될 예정입니까? 스레드가 종료되기 전에 알아,하지만 특히 JNI의 경우. 그것은 C++로 돌아 오기 전에 또는 C++ 코드가 끝난 후에 호출됩니다.) JNI의 스레드 관리와 관련이 있다고 생각합니다. 관련된 모든 정보도 공유하십시오. - 내가 너무 내 자바 코드에있는 모든 예외 (A
try
/catch
블록을 넣어 제외하고 기타 다른 방법)
감사를 잡을 수 어쨌든입니다.
제임스, 설명해 주셔서 감사합니다. 매우 유용합니다. 우리는 jenv.CheckException (...) 메소드를 사용하여 Java 메소드를 호출하고 예외는 C++에서 캡처됩니다. 따라서 코드는 실행하는 것이 안전하다고 생각하지만 C 대신 Java에서 모든 예외를 기록하려고합니다. 그러나 UncaughtExceptionHandler에서는이를 수행 할 수 없습니다. – user788767