class AndroidJniDemo5 {
privatenativevoid createException()throwsIllegalArgumentException; //JNI中抛出一个参数不合法异常
private void throwException()throwsNullPointerException {
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的规则。

更多相关文章

  1. android 特效之一 电视机关闭特效
  2. Android剪切板用法
  3. Android(安卓)AIDL实现跨进程Activity与Service的通信
  4. android 开发技巧(13)--处理空列表
  5. Android(安卓)Studio 快捷键使用
  6. android获取今天周几的示例
  7. [原创]Android(安卓)init.rc文件解析过程详解(二)
  8. android 取消edittext自动获取焦点弹出输入法
  9. Android学习笔记_31_通过后台代码生成View对象以及动态加载XML布

随机推荐

  1. 【Android翻译】Support Library Setup
  2. Android——自由拖动并显示文字的悬浮框
  3. Android启动图3秒后自动跳转首页
  4. Android(安卓)自定义View学习(4)波浪效果
  5. 通过Android(安卓)Studio查看SDK源码
  6. Android(安卓)中input event的分析
  7. android studio中使用NDK开发C++
  8. Android(安卓)4.1 Netd详细分析(五)代码分
  9. Android开发入门之访问通讯录中的联系人
  10. android-HttpClient和HttpURLConnection