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都可以捕获到异常!
-------完-------
阅读全文
0 0
- JNI开发之捕获异常
- Spring-MVC开发之全局异常捕获
- Android开发之全局异常捕获
- jni异常,c++抛出异常,java捕获
- iOS之捕获异常
- espresso之异常捕获
- javascript之异常捕获
- Spring-MVC开发之全局异常捕获全面解读
- Spring-MVC开发之全局异常捕获全面解读(转载)
- Android开发之全局异常捕获完美闪退
- Spring-MVC开发之全局异常捕获全面解读
- Spring-MVC开发之全局异常捕获全面解读
- Spring-MVC开发之全局异常捕获全面解读
- java多线程之捕获异常
- WINFORM未处理异常之捕获
- java面试之异常捕获
- Java多线程之捕获异常
- Java异常捕获之finally
- ECJIA到家短信插件开发
- string 、stringBuffer、stringBuilder之间的区别
- Java 异常处理机制
- 欢迎使用CSDN-markdown编辑器
- 单项链表查找、相交或成环的几个算法
- JNI开发之捕获异常
- 香农外传
- 4.SpringMVC_@RequestParam和@RequestHeader 、@CookieValue 获取请求参数
- Android studio 命令行编译 Gradle 命令详解
- 用大白菜重装电脑系统
- 对php-fpm的理解重述
- 造成DELPHI程序的稳定性原因及解决方法
- Oracle之只有数据文件恢复数据库
- 游戏编程入门(15):开发 MeteorDefense(抵御流星)游戏