Android-NDK开发之基础--Android JNI实例代码(四)-- JNI中的异常处理实例代码

转载 2012年03月29日 17:51:54

原文地址:http://blog.csdn.net/geolo/article/details/6168317

 class AndroidJniDemo5 {
 private native void createException() throws IllegalArgumentException; //JNI中抛出一个参数不合法异常
 private void throwException() throws NullPointerException {
  throw new NullPointerException("Java error, android123 "); //Java中产生一个空指针异常
 }
 public static void main(String args[]) {
  AndroidJniDemo5 ajd5 = new AndroidJniDemo5();
  try {
   ajd5.createException(); 
  } catch (Exception e) {
     e.printStackTrace();
  }
 }
 static {
  System.loadLibrary("AndroidJniDemo5");
 }
}

下面的JNI中的异常具体代码

JNIEXPORT void JNICALL
Java_AndroidJniDemo5_createException(JNIEnv *env, jobject obj)
{
 jthrowable throwable;
 jclass clazz = (*env)->GetObjectClass(env, obj);
 jmethodID mid = (*env)->GetMethodID(env, clazz, "throwException", "()V"); //获取Java中的throwException方法ID
 if (mid == NULL)
 {
  return;
 }

 (*env)->CallVoidMethod(env, obj, mid); //执行throwException方法

 throwable = (*env)->ExceptionOccurred(env);  //有异常发生,其实Android123提醒大家还可以使用JNI中的异常检测ExceptionCheck函数来判断

 if (throwable)  // 如果发生了异常
 {
  jclass newExceptionClazz; 
  (*env)->ExceptionDescribe(env);
  (*env)->ExceptionClear(env);

  newExceptionClazz = (*env)->FindClass(env,"java/lang/IllegalArgumentException"); //实例化一个参数不合法异常

  if (newExceptionClazz == NULL)
  {
   return;
  }
  (*env)->ThrowNew(env, newExceptionClazz, "JNI cwj exception"); //在JNI中抛出异常
 }
}

 最后我们可以看到在JNI中处理很多事情确实需要编写很多代码,同时有关类的构造符号什么的,目前的IDE和编译器无法检查,所以Android开发网提醒大家一定要记住Java签名符号的格式和规范,下一次我们给出一些例子,帮助Android NDK初学者快速了解JNI的规则。

相关文章推荐

Android-NDK开发之基础--Android JNI实例代码(二)-- 获取/设置类的域或者说属性字段

(1 String类型的属性读写class AndroidJniDemo2 { private String sTmp; private native void readwriteField(); p...
  • GEOLO
  • GEOLO
  • 2011年01月28日 21:34
  • 1375

Android NDK(七):JNI异常处理

上一篇博客分析了JNI中的引用,以及在使用时需要注意的情况。Android NDK(六):局部引用和全局引用 本篇博客内容和大家唠唠JNI中对异常的处理。说起异常,大家肯定都不陌生。几乎每天都在跟bu...

Android-调用本地方法将小写字符串转成大写字符串/NDK-JNI开发实例(四)

Java调用本地方法将小写字符串转成大写字符串; test3.c // // Created by yulongji on 2015/8/31. // #include #include /...

Android-使用C++实现调用本地方法返回字符串显示在界面上/NDK-JNI开发实例(八)

本地方法使用C与C++的实现代码是不同的,且.h头文件必须引用; 在生成jni文件夹同时将生成.h头文件放在该目录下、命令: 进入项目名-->app-->src-->main-->java 目录下...

android Jni NDK开发环境搭建及其简单实例的编写

android  jni-ndk开发, 环境搭建:http://blog.csdn.net/nxh_love/article/details/30993255 实例参考文章:http://...
  • rong_wz
  • rong_wz
  • 2015年03月22日 13:45
  • 423

Android-调用本地方法实现将C进程分支出来即生成系统进程/NDK-JNI开发实例(九)

流程: 点击button调用本地方法,使用C实现本地方法;C实现方法中分支出C进程; 如何在本地方中打印LOG; build.gradle配置 : defaultConfig { ...

Android-调用本地方法计算int数值相加结果显示在界面上/NDK-JNI开发实例(三)

Java调用本地方法计算int数值相加,得出的结果显示在界面上; test1.c // // Created by y_ulongji on 2015/8/31. // #include JNIEX...

android NDK/JNI环境配置及实例开发流程

来源:ITEYE 作者:daixj110 一cygwin安装 cygwin精简版下载地址:http://down.51cto.com/download.php?do=co...

Android-本地方法C调用Java中的方法/NDK-JNI开发实例(六)

流程:  点击button按钮调用本地方法,本地方法中使用C调用Java中的show()方法; 生成方法的签名: 打印方法签名 项目名-->app-->build-->interm...

Android-本地方法与Java相互调用-自定义ProgressBar(锅炉压力监测例子)/NDK-JNI开发实例(七)

流程: 点击“开始检测按钮”Java调用本地方法startMonitor(),并启动一个线程,本地方法使用C来实现;本地方法的实现 产生随机数传给Java中的show()方法,show()方法中调用M...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android-NDK开发之基础--Android JNI实例代码(四)-- JNI中的异常处理实例代码
举报原因:
原因补充:

(最多只允许输入30个字)