美文网首页
JNI基础(10): JNI异常处理

JNI基础(10): JNI异常处理

作者: MemetGhini | 来源:发表于2022-01-13 00:09 被阅读0次

为了处理以Java代码实现的方法执行中抛出的异常,或者是Native代码中抛出的Java异常,JNI提供了Java异常机制的钩子程序。该机制与C/C++中常规函数实现的标准错误处理无关。JNI提供一个函数集来在本机代码中检查、分析和处理Java异常。用JNIEnv实例来调用

  • jboolean ExceptionCheck();如果一个异常已经抛出,下面的函数返回JNI_TRUE,否则返回JNI_FALSE:
/*如:当异常发生时,清理并抛出自定义异常*/
if(env->ExceptionCheck())
{
    env->ExceptionClear();//清除异常
    env->ThrowNew(env->FindClass("java/lang/Exception"),"JNI捕捉了异常");
}
  • void ExceptionDescribe() 函数获取正在被抛出异常的一个本地引用。本机代码或者Java代码必须处理该异常。
  • void ExceptionDescribe() 函数打印有关刚刚被抛出到标准错误输出中的异常信息。该信息包括一个栈追踪信息。
  • void ExceptionClear(); 函数清理一个刚刚抛出的异常。
    *jint Throw(jthrowable obj) 函数抛出一个已经创建的异常。如果异常成功抛出,返回0;否则返回一个负值。
/*可以这样使用:手动抛出异常,然后在本机或Java代码中处理*/
jthrowable mException = NULL;
mException = env->ExceptionOccurred();
if (mException != NULL) {
    env->Throw(mException);
    //或抛出自定义异常
    env->ThrowNew(env->FindClass("java/lang/Exception"), "xxx异常"); 
    //最后别忘了清除异常,不然还是会导致VM崩溃
    env->ExceptionClear();
}
  • jint ThrowNew(jclass clazz, const char* message)函数基于clazz创建一个异常,它应该是继承自Throwable,并且异常文本是由msg(按照UTF-8)指定。如果异常的构造以及抛出成功,返回0;否则返回一个负值。

相关文章

网友评论

      本文标题:JNI基础(10): JNI异常处理

      本文链接:https://www.haomeiwen.com/subject/sxjpcrtx.html