在CPP中,可以调用 ExceptionOccurred 和 ExceptionCheck 来检查处理异常
jthrowable flag = env->ExceptionOccurred(); { /* Handle exception here or free up any resources held Exception remains pending until control returns back to the Java code. */ return; } jboolean flag = env->ExceptionCheck(); if (flag) { /* Handle exception here or free up any resources held Exception remains pending until control returns back to the Java code. */ env->ExceptionClear(); return; }
在 rust 的 jni 这个crate里, 上述两个函数,被转换成了 exception_occurred 和 exception_check
在rust调用 call_static_method 或者 call_method, 都不会执行异常处理,需要你自己 处理它们
let result = je.call_static_method(cls, "renderTo", "(II[B)V", &[ JValue::from(width), JValue::from(height), JValue::from(rgbs2), ])?; je.exception_check()?;
在调用 可能抛出Java异常的JNI函数后,总是调用 ExceptionCheck 或 ExceptionOccurred 来检查下异常。
总是检查从 JNI函数返回的值。