JNI方法笔记3 异常
1.捕获异常
在C++中 通过ExceptionOccurred函数捕获异常
然后通过ExceptionClear显式清楚异常
jthrowable ex;
env->CallVoidMethod(instance, throwingMethodId);
ex = env->ExceptionOccurred();
if(ex != 0){
env->ExceptionClear();
}
2.抛出异常
主要通过 env->ThrowNew(jclass , string); 函数抛出异常
例子
jclass clazz;
clazz = env->FindClass("full-package-path");
if (0 != clazz){
env->ThrowNew(clazzm "Exception message.");
}
抛出异常并不会停止原生函数的执行,抛出异常时,原生函数应该释放所有已分配的原生资源。而通过JNIEnv接口获得的引用是局部引用,一旦返回原生函数,他们会自动被虚拟机释放。