问题标签 [jnienv]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 从JNI函数(Android)之外的C调用java中的函数?
我正在尝试使用 Android 中的 JNI 从我的 C 代码中调用 Java 函数,但我的处境有些尴尬。
我的 C 代码在传递给库的回调中的 JNI 函数之外执行。
这是一个java代码的例子
这是C代码的示例
现在只要 C Lib 做它需要做的事情,它就会触发回调。但是我没有办法将它发送回java类来处理数据。
android - JNI 如何在内存级别上工作
我有一个 java 文件,它加载 .so 文件并打印来自 .so 文件的结果。我没有 .so 文件的源代码。谁能告诉我如何在内存结构中加载 .so 结果以及这个 Java 类从哪里读取 .so 生成的结果并将它们打印出来?
java - C + JNI 无法执行一个非常简单的程序
我将从我的代码开始:
我希望它打印“Hello World”,但它没有,而是Segmentation fault (core dumped)
出现烦人的错误。我无法弄清楚这段代码有什么问题,我试图注释掉之后someText = (*env)->NewStringUTF(env, "Hello World");
的所有内容并且程序没有崩溃,我也尝试只注释someText = (*env)->NewStringUTF(env, "Hello World");
并且我也工作了。我什至将println
签名更改为"boolean"
并将 0 传递给它,程序按我的预期打印“false”,所以我猜这是NewStringUTF
方法有问题。
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b11)
OpenJDK 64-Bit Server VM (build 25.131-b11, mixed mode)
注释掉之后NewStringUTF
经过一些观察,看起来该功能在添加JNI_CreateJavaVM
后崩溃NewStringUTF
了,但在删除后它正在“工作”。这有多奇怪?
这是我正在使用的 JDK 和 JRE:https ://www.archlinux.org/packages/extra/x86_64/jdk8-openjdk/
我正在使用以下命令进行编译:
并运行文件
明天
不同的代码,同样的问题:
编译并运行:
但是,如果我评论代码的一部分:
编译并运行:
java - JNI - 本机方法中的致命错误:错误的全局或本地引用传递给 JNI
我检查了有关此错误的相关问题,但找不到答案。我有以下代码。该错误与调用 jLog 方法有关,如果我将其取出,错误就消失了,所以我不明白问题出在哪里——这只是我对 JNI 的第一次体验:
谢谢你。
java - 使用不同的源包作为类路径多次调用 JNI_CreateJavaVM
我有下面的函数“initializeAlgo”,它用于使用特定的 Algo jar 文件初始化 Java VM,后来我使用创建的 java 环境来调用 Jar 中的其他 fns。
假设如果我必须支持满足某个接口的多个算法源的动态加载。即加载 Algo_1 并进行一些处理并记录结果,并且在不关闭应用程序的情况下我想加载 Algo_2 并执行相同的处理并记录结果。它们都具有相同的命名空间和 fns。是否建议在应用程序的同一实例中执行此操作?
java - 如何将 void ** 从 JNI C 代码传递给 C 库?
1) image_api.h 定义了以下方法 - int process_image(const char *svgData, void **mapData);
2) 现在我需要调用此方法并将正确的值传递给从 image_api.so 文件加载的 process_image
- 在 JNI C 包装代码中创建 void** 实例的正确方法是什么?
3)
////////////
我在调用 process_image 作为方法签名不匹配时遇到 UnsatisfiedLinkError
java - JNI 编程
我是 jni 编程的新手。我想将一个浮点数组从java传递给jni,动态分配足够的内存给jni端的浮点数组,在jfloatArray中存储一些值,然后在java中访问它。我不想返回jfloatArray,只是修改传入的输入float数组。我尝试了以下方法,但它没有修改我的 java 浮点数组。如何做到这一点?
我从Java 和 C 之间的传递数据中读到,这可以通过传递自定义对象来实现。但是,我不太确定如何从 jni 为包含这样的浮点数组的 java 对象执行此操作
android - JNI:捕获 NewStringUTF 内部异常
我的 JNI 代码char* src
从外部源接收 a ,将其转换为String
using jstring jStr = env->NewStringUTF(src)
,并将结果传递jStr
给上层 - Java 层。
某些输入src
值会导致以下运行时错误(在对 的调用中NewStringUTF
):
我使用的任何方法都不能“捕获”这个NewStringUTF错误/异常:
if (env->ExceptionCheck() == JNI_TRUE)
通话后放置NewStringUTF
。if (env->ExceptionOccurred())
通话后放置NewStringUTF
。- 将调用限制为
NewStringUTF
一个try...catch
块。
注意:问题的重点是捕获异常(并通过控制其影响,因此它不会使应用程序崩溃),而不一定要解决它(尽管它可能有用)。
我正在使用带有 NDK v15.2 的 Android Studio v2.3.3(最新版本)。
你的帮助将非常有义务。
java - 如何在使用 maven 打包时调用 SO 本机库?
我已经开发了一个带有swing,maven和一些本机库的项目。现在我在从 maven 包生成 jar 后从 java 调用 SO 时遇到问题。我将其包含在 POM.xml 中。并将该文件包含在 jar 中。但它不会链接两者。
执行 jar 时出现错误,例如“线程中的异常”main”java.lang.UnsatisfiedLinkError:java.library.path 中没有项目”
并且还想添加库文件夹并将其导出到jar中。有什么办法吗?
java - JNI 在应用程序中检测到错误:CallObjectMethodV 的返回类型与 void android.media.AudioTrack.play() 不匹配
我正在尝试使用 AudioTrack 从 JNI 播放音频缓冲区
使用以下代码从 JNI 初始化 AudioTrack 对象
有错误的申请
JNI 在应用程序中检测到错误:CallObjectMethodV 的返回类型与 void android.media.AudioTrack.play() 不匹配
当我执行代码时
谢谢你的帮助