JNI异常处理
C++的异常处理
- 1.自定义struct覆写exception里面的方法
- 2.throw 抛出自定义类型异常,catch后处理
try {
// c++的异常处理,
// 1.覆写继承exception的方法,抛出自定的异常类
// 2.throw 自定义异常(string,int等),catch后处理
int a = 10;
int b = 0;
if (b == 0) {
// throw "b is zero";
throw NoZeroException();
}
int c = a / b;
}
catch (NoZeroException e) {
__android_log_print(ANDROID_LOG_INFO, "JNI_TAG", "exception ---> %s", e.what());
}
catch (const char *message) {
__android_log_print(ANDROID_LOG_INFO, "JNI_TAG", "exception ---> %s", message);
}
JNI异常处理
- 1.native层处理
- 2.抛出一个java类的Throwable对象,让java层处理
jclass jclz = env->GetObjectClass(thiz);
jfieldID f_id = env->GetFieldID(jclz, "name", "Ljava/lang/String;");
bool error = env->ExceptionCheck();
if (error) {
__android_log_print(ANDROID_LOG_INFO, "JNI_TAG", "exception ---> 出错了");
env->ExceptionClear();
jclass no_such_method = env->FindClass("java/lang/NoSuchFieldException");
env->ThrowNew(no_such_method,"NoSuchFieldException name");
}
java层处理
public native void jniException();
try{
jniException();
}catch (Exception e){
Log.i("JNI_TAG","异常");
}
|