Android JNI开发摘录(四)之JNI异常处理
五.处理本机代码中的异常
为了处理以Java代码实现的方法执行中抛出的异常,或者是以本机代码编写的方法抛出的Java异常,JNI提供了Java异常机制的钩子程序。该机制与C/C++中常规函数实现的标准错误处理无关。JNI提供一个函数集来在本机代码中检查、分析和处理Java异常。
(1).如果一个异常已经抛出,下面的函数返回JNI_TRUE,否则返回JNI_FALSE:
jboolean ExceptionCheck();
/*如:当异常发生时,清理并抛出自定义异常*/
if(env->ExceptionCheck())
{
env->ExceptionClear();//清除异常
env->ThrowNew(env->FindClass("java/lang/Exception"),"xx异常");
}
(2).ExceptionOccurred函数获取正在被抛出异常的一个本地引用。本机代码或者Java代码必须处理该异常:
jthrowable ExceptionOccurred();
(3).ExceptionDescribe函数打印有关刚刚被抛出到标准错误输出中的异常信息。该信息包括一个栈追踪信息:
void ExceptionDescribe();
(4).ExceptionClear函数清理一个刚刚抛出的异常:
void ExceptionClear();
(5).Throw 函数抛出一个已经创建的异常。如果异常成功抛出,返回0;否则返回一个负值:
jint Throw(jthrowable obj);
/*可以这样使用:手动抛出异常,然后在本机或Java代码中处理*/
jthrowable mException = NULL;
mException = env->ExceptionOccurred();
if (mException != NULL) {
env->Throw(mException);
/*或抛出自定义异常
env->ThrowNew(env->FindClass("java/lang/Exception"),
"xxx异常"); */
//最后别忘了清除异常,不然还是会导致VM崩溃
env->ExceptionClear();
return -1;
}
(6).ThrowNew函数基于clazz创建一个异常,它应该是继承自Throwable,并且异常文本是由msg(按照UTF-8)指定。如果异常的构造以及抛出成功,返回0;否则返回一个负值。
jint ThrowNew(jclass clazz,constchar *msg);
/*如:在可能出错的地方抛出自定义异常,然后在本机代码或者Java代码中处理*/
env->ThrowNew(env->FindClass("java/lang/Exception"),
"xxx异常");
(7)FatalError函数会生成致命错误信号。一个致命错误是特指无法恢复的情况。VM在调用该函数之后将会关闭:
void FatalError(constchar *msg);
转载于:https://blog.51cto.com/huihui88/1399266
Android JNI开发摘录(四)之JNI异常处理相关推荐
- JNI开发笔记(四)--实现一个简单的JNI工程并生成so库
实现一个简单的JNI工程并生成so库 引 前言 1. 编写C/h文件并添加到工程 2. 修改CmakeLists.txt文件 3. 编写native-lib.cpp文件 4. 在MainActivit ...
- Android Studio开发(四)SQLite数据库的DAO标准CRUD操作模拟微信通讯录
Android Studio开发(四)SQLite数据库的DAO标准CRUD操作模拟微信通讯录 Android Studio开发(四)SQLite数据库的DAO标准CRUD操作模拟微信通讯录 一.任务 ...
- Android JNI开发摘录(五)之对象引用处理
六.本机代码中的对象引用 终于讲到对象引用了,在此推荐JNI开发必看的 使用 Java Native Interface 的最佳实践 JNI提供了函数集来使用本机代码中的Java对象,包括前面已经介绍 ...
- android 串口开发第二篇:利用jni实现android和串口通信
一:串口通信简介 由于串口开发涉及到jni,所以开发环境需要支持ndk开发,如果未配置ndk配置的朋友,或者对jni不熟悉的朋友,请查看上一篇文章,android 串口开发第一篇:搭建ndk开发环境以 ...
- 【Android游戏开发十四】深入Animation,在SurfaceView中照样使用Android—Tween Animation!
李华明Himi 原创,转载务必在明显处注明: 转载自 [黑米GameDev街区] 原文链接: http://www.himigame.com/android-game/331.html 很多童鞋说 ...
- JNI开发笔记(二)--创建JNI基础工程并运行
创建JNI基础工程并运行 引 1. 创建JNI工程 2. 添加虚拟手机设备 3. 运行JNI基础工程 引 JNI开发笔记(一)–Android Studio安装与环境搭建 1. 创建JNI工程 And ...
- 【Android游戏开发十四】深入Animation,在SurfaceView中照样使用Android—Tween Animation!...
本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/android-game/331.html 之 ...
- Android 音频开发(四) 如何播放一帧音频数据下
再看这一篇文章前,如果你是小白,我建议你先看一下Android 音频开发(一) 基础入门篇这一篇.今天继续讲解如何通过Android SDK自带API实现播放一帧音频数据. 我们都知道,Android ...
- 【学习Android NDK开发】Java通过JNI调用native方法
参考:Android NDK,sample/hello-jni示例项目 系统环境:Ubuntu 12.04 LTS 32-bit 1.准备工作 打开Eclipse,新建Android项目: Appli ...
最新文章
- 转:mybatis - 分页功能
- 怎么查看电脑硬盘序列号
- ESP8266开发笔记
- 计算机电缆2x2x1.5,计算机电缆djypvp1x2x1.5
- python异步框架twisted_Python学习八十七天:使用异步的twisted框架写入数据
- 陶哲轩实分析定理11.9.1:微积分第一基本定理(二)
- android 之反编译
- swift实例教程_Swift示例教程基础
- ppt上的倒计时小工具_英孚线上精品小班课平台操作指南这些课堂小工具你都知道吗?更多课前指引看这里!...
- Java编程:爬楼梯问题、斐波那契数列问题
- 营收增长“疫”外超预期,走向手游化的动视暴雪能否弯道超车?
- PopClip 能让像苹果电脑像 iOS 一样选中文字后弹出搜索、复制、粘贴等选项
- 《软件工程之美》打卡第六周
- 基于LabVIEW的音频信号采集分析系统
- EcmaScript 2022中的新特性
- ffmpeg 裁剪视频
- C语言程序——小写字母转换成大写字母
- xp系统关闭闲置服务器,教你win10系统空闲进程占用cpu怎么关闭
- CSS实战样式:文字两侧加居中横线
- 电脑代理服务器出现问题的解决办法