问题标签 [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.

0 投票
2 回答
1331 浏览

java - 从JNI函数(Android)之外的C调用java中的函数?

我正在尝试使用 Android 中的 JNI 从我的 C 代码中调用 Java 函数,但我的处境有些尴尬。

我的 C 代码在传递给库的回调中的 JNI 函数之外执行。

这是一个java代码的例子

这是C代码的示例

现在只要 C Lib 做它需要做的事情,它就会触发回调。但是我没有办法将它发送回java类来处理数据。

0 投票
4 回答
804 浏览

android - JNI 如何在内存级别上工作

我有一个 java 文件,它加载 .so 文件并打印来自 .so 文件的结果。我没有 .so 文件的源代码。谁能告诉我如何在内存结构中加载 .so 结果以及这个 Java 类从哪里读取 .so 生成的结果并将它们打印出来?

0 投票
1 回答
384 浏览

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/

我正在使用以下命令进行编译:

并运行文件

明天

不同的代码,同样的问题:

编译并运行:

但是,如果我评论代码的一部分:

编译并运行:

0 投票
1 回答
821 浏览

java - JNI - 本机方法中的致命错误:错误的全局或本地引用传递给 JNI

我检查了有关此错误的相关问题,但找不到答案。我有以下代码。该错误与调用 jLog 方法有关,如果我将其取出,错误就消失了,所以我不明白问题出在哪里——这只是我对 JNI 的第一次体验:

谢谢你。

0 投票
0 回答
360 浏览

java - 使用不同的源包作为类路径多次调用 JNI_CreateJavaVM

我有下面的函数“initializeAlgo”,它用于使用特定的 Algo jar 文件初始化 Java VM,后来我使用创建的 java 环境来调用 Jar 中的其他 fns。

假设如果我必须支持满足某个接口的多个算法源的动态加载。即加载 Algo_1 并进行一些处理并记录结果,并且在不关闭应用程序的情况下我想加载 Algo_2 并执行相同的处理并记录结果。它们都具有相同的命名空间和 fns。是否建议在应用程序的同一实例中执行此操作?

0 投票
2 回答
677 浏览

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

0 投票
2 回答
395 浏览

java - JNI 编程

我是 jni 编程的新手。我想将一个浮点数组从java传递给jni,动态分配足够的内存给jni端的浮点数组,在jfloatArray中存储一些值,然后在java中访问它。我不想返回jfloatArray,只是修改传入的输入float数组。我尝试了以下方法,但它没有修改我的 java 浮点数组。如何做到这一点?

我从Java 和 C 之间的传递数据中读到,这可以通过传递自定义对象来实现。但是,我不太确定如何从 jni 为包含这样的浮点数组的 java 对象执行此操作

0 投票
1 回答
1061 浏览

android - JNI:捕获 NewStringUTF 内部异常

我的 JNI 代码char* src从外部源接收 a ,将其转换为Stringusing 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(最新版本)。

你的帮助将非常有义务。

0 投票
1 回答
919 浏览

java - 如何在使用 maven 打包时调用 SO 本机库?

我已经开发了一个带有swing,maven和一些本机库的项目。现在我在从 maven 包生成 jar 后从 java 调用 SO 时遇到问题。我将其包含在 POM.xml 中。并将该文件包含在 jar 中。但它不会链接两者。

执行 jar 时出现错误,例如“线程中的异常”main”java.lang.UnsatisfiedLinkError:java.library.path 中没有项目”

并且还想添加库文件夹并将其导出到jar中。有什么办法吗?

0 投票
1 回答
3450 浏览

java - JNI 在应用程序中检测到错误:CallObjectMethodV 的返回类型与 void android.media.AudioTrack.play() 不匹配

我正在尝试使用 AudioTrack 从 JNI 播放音频缓冲区

使用以下代码从 JNI 初始化 AudioTrack 对象

有错误的申请

JNI 在应用程序中检测到错误:CallObjectMethodV 的返回类型与 void android.media.AudioTrack.play() 不匹配

当我执行代码时

谢谢你的帮助