java - JNI Throw 是否会中断方法执行?
问题描述
当我调用时env->ThrowNew(clazz, "...")
,C++/C方法的后续执行会停止还是我必须自己停止?
// This is the method which checks if a class can be loaded.
static inline jclass _check_find_class(JNIEnv* env, char* name) {
jclass clazz = env->FindClass(name);
if (clazz == NULL) {
env->ThrowNew(env->FindClass("java/lang/NoClassDefFoundError"), message);
}
return clazz;
}
// This method is called in other functions like
jclass load_main_class(JNIEnv* env) {
auto clazz = _check_find_class(env, "class/which/cannot/be/loaded");
do_stuff(env, clazz);
return clazz;
}
当我调用load_main_class
方法时会发生什么,它无法找到类并且ThrowNew
调用了方法?
解决方案
JNI 异常不会立即中断本机方法的执行。但是如果你没有正确处理这个异常,那么任何 JNI 函数调用(除了极少数被显式清除的函数调用)都会崩溃。
推荐阅读
- r - 使用 ggplot2 可定制的加法绘图函数?
- django - 用户在Django表单中选择汽车品牌后显示一组汽车模型
- javascript - Chart.js(堆积条形图)如何计算工具提示中标签的总和?
- node.js - 如何使用视频缓冲区数据获取 Node Js 中的视频持续时间?
- python - tkinter 上的异步数据处理 - 多个循环块
- typescript - 如何在 jest 27 中模拟 window.navigator.language
- php - 如何将html与php结合起来
- ios - 在 React Native ios Simulator 中的应用程序内部是否有相当于浏览器检查的工具?
- bert-language-model - 是否从 BertModel 中删除了 position_embeddings 函数?
- javascript - bootstrap 4 .active 类在点击时不会改变