JNI异常的处理

android jni抛出异常 这是我自己写的android jni里面抛出异常 的demo 立即下载

Java中需要调用C代码,C代码中反过来又会操作Java中的对象,这就需要在C代码中处理Java操作可能出现的异常。如果不进行处理,一旦发生异常,C代码部分就会直接退出,同时抛给调用它的Java代码一个莫名其妙的错误(可能是一个没有任何意义的Exception)直接看这个错误是无法分析真正的错误原因的。
所以C代码中必须要处理这些异常,要么将其抛出,要么忽略掉。

下面是专用的JNI函数,可以对异常进行处理。

Throw():丢弃一个现有的异常对象;在固有方法中用于重新丢弃一个异常。
ThrowNew():生成一个新的异常对象,并将其丢弃。
ExceptionOccurred():判断一个异常是否已被丢弃,但尚未清除。
ExceptionDescribe():打印一个异常和堆栈跟踪信息。
ExceptionClear():清除一个待决的异常。
FatalError():造成一个严重错误,不返回。

在所有这些函数中,最不能忽视的就是ExceptionOccurred()和ExceptionClear()。大多数JNI函数都能产生异常,而且没有象在Java的try块内的那种语言特性可供利用。所以在每一次JNI函数调用之后,都必须调用ExceptionOccurred(),了解异常是否已被丢弃。若侦测到一个异常,可选择对其加以控制(可能时还要重新丢弃它)。然而,必须确保异常最终被清除。这可以在自己的函数中用ExceptionClear()来实现;若异常被重新丢弃,也可能在其他某些函数中进行。

举个最简单的例子,如果调用Java中的方法后出现异常,忽略。

jobject objectAttr = (*env)->CallObjectMethod(env, objectDocument, createAttributeMid, stoJstring(env, "ABC"));
// deal with exception
exc = (*env)->ExceptionOccurred(env);
if(exc) {
      (*env)->ExceptionClear(env);
      doSomething();
}

http://blog.youkuaiyun.com/arui319/article/details/2178619

GB 44497-2024《智能网联汽车 自动驾驶数据记录系统》标准解读 GB 44497-2024《智能网联汽车 自动驾驶数据记录系统》针对智能网联汽车的自动驾驶数据记录系统进行了全面规范。标准要求我们记录车辆在自动驾驶模式下的所有关键操作数据,如:1. 车辆状态数据,如速度、加速度、转向角度、制动状态等;2. 环境感知数据,如周围物体的位置、速度、类型等;3. 驾驶决策数据,如路径规划、避障决策、紧急制动指令等;4. 系统状态数据,如软件版本、硬件状态、系统警告信息等。在数据存储方面,标准强调了数据的安全性和可靠性。 阅读详情

相关推荐

从流量到凭证:实战解析SMB协议中的NTLMv2/v1哈希提取与破解

本文详细解析了SMB协议中NTLMv2/v1哈希的提取与破解实战技巧。从流量捕获、哈希格式处理到Hashcat高效破解,提供了一套完整的操作指南。文章特别强调了NTLMv2和NTLMv1哈希的区别及处理要点,并分享了防护建议与检测方法,帮助安全人员提升渗透测试效率。

weixin_30642561的博客 116

JNI/NDK入门指南之JNI异常处理

          JNI/NDK入门指南之JNI异常处理   任何人都犯错误,连我们的好人强东哥都是如此,当然我们程序员也在这个行列之内了,哈哈(不是各位读者想象的那个错啊)。在Java ...

IT先森 2889

scGPT实战指南:如何用生成式AI加速你的单细胞多组学研究?

本文提供了scGPT在单细胞多组学研究中的实战指南。详细介绍了从环境部署、数据预处理到细胞类型注释与扰动预测等核心任务的操作流程。通过利用生成式AI和Transformer基础模型,scGPT能够显著加速分析,并提升细胞注释的准确性及基因调控网络推断的深度,为研究人员提供了强大的AI分析引擎。

weixin_29215815的博客 402

JNI/NDK开发指南(十一)——JNI异常处理

异常简介 异常,显而意见就是程序在运行期间没有按照正常的程序逻辑执行,在执行过程当中出现了某种错误,导致程序崩溃。在Java中异常分为运行时异常(RuntimeException)和编译时异常,在程序中有可能运行期间发生异常的逻辑我们会用try…catch…来处理,如果没有处理的话,在运行期间发生异常就会导致程序奔溃。而编译时异常是在编译期间就必须处理的。本章主要介绍运行时异常。示例1: // 运行时异常 public static void exceptionCallback() { int

跨链技术践行者 1139

R语言基础之R语言入门

R语言最初是由新西兰奥克兰大学统计系的教授Ross Ihaka和Robert Gentleman在S语言基础上开发完成的。是一门解释性语言。在我看来R语言是一门数学性极强的语言,或者说这是一门为数学而生的语言,因为其具有极其出色的计算与统计分析能力...

weixin_46912400的博客 5万+

用51单片机和LD3320语音模块DIY一个会说话的温度报警器(附完整代码)

本文详细介绍了如何使用51单片机和LD3320语音模块DIY一个智能温度报警器,包括硬件选型、电路设计、软件开发及核心功能实现。通过DS18B20温度传感器和语音模块的结合,实现温度超标时的语音报警功能,适合智能家居系统等应用场景。附完整代码,方便开发者快速复现。

weixin_42525632的博客 420

【JNI C++学习篇-Exception】

总结 Android系统8.1.0 (以下实验结果,可能与Android系统相关相关) JNI未做任何处理,Native调用Java代码发生异常 java方法退出 有Java异常抛出 native方法正常运行 进程重启 调用ExceptionClear,Java层异常不再抛出 Git tag为exception_v1.0 源代码Git地址 git@github.com:AlbertSno...

zhjali123的专栏 433

Polyworks脚本开发学习笔记(十五)-用Python连接Polyworks的COM组件

Polyworks脚本开发学习笔记(十五)-利用Python连接Polyworks的COM组件

qq_43662503的博客 2501

JNI异常处理

注意文中指的可check的exception是运行在vm中的代码抛出的exception,如jni中调用java层的方法,或者通过执行JNIEnv中的方法都属于运行在jvm中代码。就是说非运行在jvm中代码发生了异常,使用env->ExceptionCheck()是没用的。如在一个jni方法中有如下代码: JNIEnv* mEnv; mEnv->ExceptionCheck(); ...

淡淡的宁静的博客 4576

【Linux命令大全】006.网络通讯之write命令(实操篇)

Linux write命令摘要 write是Linux系统中用于用户间实时通讯的命令工具,允许向其他登录用户的终端发送消息。主要功能包括: 基本使用:通过write username向指定用户发送消息,Ctrl+D结束输入 终端指定:当用户登录多个终端时,可用write username tty指定目标终端 实用技巧: 使用who查看在线用户 通过管道发送单行消息:echo "内容" | write user 支持多行消息发送和简单聊天会话。

yuhuasheng1997的博客 213

工程师必收藏,Juniper(Junos)网络设备命令大全

不要直接删除配置 → 使用deactivate配置前先修改大配置用出现风险命令一律用写自动化时一律用格式真正会用 Juniper 的工程师,不是命令多,而是命令用得精。

网络技术联盟站 403

JNI的一些最佳实践(二)异常处理

当在 JNI 中调用有可能抛出异常的 Java 函数时,一定要使用和函数先检查、清空异常后再调用其他 JNI 函数,否则会引发崩溃。在处理 JNI 层抛出的异常时,我们首先需要通过 try catch 先捕获这个异常,然后再通过 JNI 的ThrowNew函数重新抛出一个能够被 Java 层捕获的异常。ExceptionOccurred:检查是否发生了异常,若用异常返回该异常的引用,否则返回NULL。ExceptionDescribe:打印异常的堆栈信息。

ljy545733599的博客 1318

uniapp+coze制作app智能体

使用 UniApp 配合 Coze 平台来开发一个具备 AI 智能体的 App,是一个高效且实用的选择。其核心思路主要有两种:一种是通过,另一种则是通过实现更自主的集成。下面的流程图可以帮你快速了解这两种方案的全貌。下面,我们来详细看看这两种方案分别如何操作。

suny8的专栏 573

java jni异常_Android jni/ndk编程五:jni异常处理

在Java的编程中,我们经常会遇到各种的异常,也会处理各种的异常。处理异常在java中非常简单,我们通常会使用try-catch-finally来处理,也可以使用throw简单抛出一个异常。那么在jni编程的时候我们又是如何处理异常的呢?异常处理流程jni规范已经给我们做好了所有需要做的事情。回想一下处理异常的过程:我们首先要在有可能产生异常的地方检测异常处理异常是的,我觉得异常的处理就是可以简单...

weixin_35907189的博客 433

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

JNI学习笔记:异常处理

1 前言 2 一个处理JNI异常的Demo 2.1 代码 2.2 一个抛出异常的工具函数 3 JNI异常处理总结 3.1 JNI异常机制 3.2 异常处理函数 4 参考链接 1 前言   在编程开发中,我们会遇到各种各样的程序异常(Exception),Java和C++等面向对象语言提供了异常处理机制,如常见的try-catch-finally机制等。异常处理机制...

大山喵写博客的地方 1545

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

android jni 异常处理,2.6 JNI异常处理

2.6 JNI异常处理JNI函数在执行过程中会出现异常,其异常处理机制与Java和C++都不一样。JNI提供了两种检查异常的方法:方法1 检查上一次 JNI函数调用的返回值是否为NULL。方法2 通过调用JNI函数ExceptionOccurred()来判断是否发生异常。检查到异常后必须予以处理。处理异常的方法也有两种:Native方法可选择立即返回,这样异常就会在调用该Native方法的Java...

weixin_39594312的博客 580

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

linux jni调用异常,JNI异常处理

很多情况下,本地代码做JNI调用后都要检查是否有错误发生,本章讲的就是怎么样检查错误和处理错误。我重点放在JNI函数调用引发的错误上面。如果一个本地方法中调用了一个JNI函数,它必须遵守下面几个步骤来检查和处理这个JNI函数调用时可能引发的错误。至于其它可能的错误,比如本地代码中调用了一个可能引发错误的系统方法,那只需要按照该系统方法的标准文档中规定的来处理就可以了。6.1概述我们通过一些例子来...

weixin_32757449的博客 484

JEFF JVM JNI异常处理设计

由于 JNI 本质上是 Java 与 C/C++ 之间的桥梁,两种语言的错误处理方式不同,因此在 JNI 中进行错误处理和异常管理时尤为重要。如果处理不当,可能会导致 JVM 崩溃、内存泄漏等严重后果。本文将探讨如何在 JNI 中处理错误和管理异常,确保代码的稳定性与健壮性。

底层软件设计内幕 1088

jni的异常处理

1.jni的代码是在虚拟机中处理的,所以为了代码调试的方便,当jni代码中出现异常时,我们需要将异常信息告诉java.   2.对于异常的处理,我们需要两个步骤   发现异常。   处理异常   3.发现异常。    通过返回值发现异常。      在可能发生异常的代码后面,判断这段代码中的返回值是否不正常,如果不正常,那么肯定出现了异常,这种方式在C 语言中非常常见。

lsdmx2016的总结 2243

Android jni/ndk编程五:jni异常处理

在java的编程中,我们经常会遇到各种的异常,也会处理各种的异常。处理异常在java中非常简单,我们通常会使用try-catch-finally来处理,也可以使用throw简单抛出一个异常。那么在jni编程的时候我们又是如何处理异常的呢?异常处理流程jni规范已经给我们做好了所有需要做的事情。回想一下处理异常的过程: 我们首先要在有可能产生异常的地方检测异常 处理异常 是的,我觉得异常的处理就是可

阳光玻璃杯 3720

JNI 异常捕获与处理

JNI 异常捕获与处理情况一:情况二情况三 jNI 异常捕获与处理,常见的 3 种情况: native 层代码出错,native自己消费错误消息 java 层代码出错,导致 native 层调用出错 native 层代码没问题,调用 java 层代码出错 情况一: native 层代码出错,native自己消费错误消息 native 层代码: extern "C" JNIEXPORT void JNICALL Java_com_example_jni_activity_ExceptionActivi

高级开发者进阶ing... QaQ 2426
上一篇: intent详解
下一篇: 模拟器快捷键
bitasd
博客等级 码龄19年 11粉丝 2原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值