JNI开发之捕获异常

来源:互联网 发布:ant编译java 编辑:程序博客网 时间:2024/06/15 17:07

前言:相信大家都遇到过bug,有bug肯定有异常,有异常我们肯定要捕获,ok,今天我们就来看下JNI下的异常捕获!

------------分割线----------

故意在c中写错一些参数让其抛出异常看看java层是否能捕捉到。

java代码:

public static void main(String[] args) {TestJni tj = new TestJni();try {// 使用方法内容故意写错抛出异常tj.exception();// 特别注意要使用Throwable才能捕获到异常} catch (Throwable e) {System.out.println("Throwable捕获到异常");e.printStackTrace();}try {// 使用方法内容故意写错抛出异常tj.exception();// 特别注意要使用Exception不能捕获到异常} catch (Exception e) {System.out.println("Exception捕获到异常");e.printStackTrace();}}// 内部故意写错抛出异常public native void exception();// 加载动态库static {System.loadLibrary("JNI");}
C代码:
#include"com_fly_TestJni.h" JNIEXPORT void  JNICALL Java_com_fly_TestJni_exception(JNIEnv *env, jobject job){jclass cls = (*env)->GetObjectClass(env, job);//其实内部没有haha这个属性变量所以 会发生异常jfieldID myjfieldID = (*env)->GetFieldID(env, cls, "haha", "()V");(*env)->GetObjectField(env, job, myjfieldID);}
运行显示:


可以得出只有Throwable才能捕获异常!

----------分割线--------

手动在c里面抛出去一个异常

java代码不需要改动。

C代码:

#include"com_fly_TestJni.h" JNIEXPORT void  JNICALL Java_com_fly_TestJni_exception(JNIEnv *env, jobject job){jclass d = (*env)->FindClass(env, "java/lang/IllegalArgumentException");(*env)->ThrowNew(env, d, "-->Exceptions from the C<--");}
运行截图:


Throwable和Exception都可以捕获到异常!

-------完-------

原创粉丝点击