1.jni的代码是在虚拟机中处理的,所以为了代码调试的方便,当jni代码中出现异常时,我们需要将异常信息告诉java. 2.对于异常的处理,我们需要两个步骤 <1>发现异常。 <2>处理异常 3.发现异常。 <1> 通过返回值发现异常。 在可能发生异常的代码后面,判断这段代码中的返回值是否不正常,如果不正常,那么肯定出现了异常,这种方式在C 语言中非常常见。 jobject object=....; if(object==NULL){ //处理 } <2>通过jni的函数检查,ExceptionCheck和 ExceptionOccured static jint throwExceptionToJava(JNIEnv* env,const char* description,const char* exceptionName){ jthrowable exec=(*env)->ExceptionOccurred(env); if (exec) { jclass excptionclass; (*env)->ExceptionDescribe(env); (*env)->ExceptionClear(env); excptionclass = (*env)->FindClass(env, exceptionName); if (excptionclass != NULL) { (*env)->ThrowNew(env, excptionclass, description); (*env)->DeleteLocalRef(env, excptionclass); (*env)->DeleteLocalRef(env, exec); return 1; } } return 0; } 4.处理异常。 <1>可以将异常通过ThrowNew,抛出. <2>也可以不抛,但是必须手动添加代码让jni函数正常运行,比如对于需要返回字符的jni函数,在有异常的时候,可以返回一个NULL. |
|
来自: lifei_szdz > 《Android》