if you invoke a Java method from JNI, calling ExceptionCheck
afterwards will return JNI_TRUE
if an exception was thrown by the Java.
if you're just invoking a JNI function (such as FindClass
), ExceptionCheck
will tell you if that failed in a way that leaves a pending exception (as FindClass
will do on error).
ExceptionDescribe
outputs to stderr. there's no convenient way to make it go anywhere else, but ExceptionOccurred
gives you a jthrowable
if you want to play about with it, or you could just let it go up to Java and handle it there. that's the usual style:
jclass c = env->FindClass("class/does/not/Exist");
if (env->ExceptionCheck()) {
return;
}
// otherwise do something with 'c'...
note that it doesn't matter what value you return; the calling Java code will never see it --- it'll see the pending exception instead.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…