问题标签 [java-native-interface]

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 投票
3 回答
2254 浏览

java - JNI 的 Autoconf 测试包括目录

我正在为 JNI 包装器编写配置脚本。配置参数之一是jni.h. 对于 C++ 编译是否正确设置了这个参数,什么是一个好的快速和肮脏的 Autoconf 测试?您可以假设您在 Linux 上运行并且g++可用。

或者,有没有办法让javah(或支持工具)直接给我这条路?

0 投票
2 回答
392 浏览

java - 如何确定 JNI (jogl) 在运行时是否可用?

我正在开发一个使用 Processing 核心库的源代码可视化项目。处理库可以选择使用 jogl OpenGL 库来渲染图形,从而真正提高性能。但是,jogl 使用的 JNI 文件不一定在运行时可用,这取决于谁在使用项目以及在什么平台上。

目前我们只是让用户指定他们是否要使用 OpenGL,但如果我们可以默认使用 OpenGL 并且仅在它不可用时回退到软件渲染,那显然会更好。处理库似乎并没有让这变得简单,你应该只指定一次渲染器,并且更改渲染器会产生……新颖的行为。

知道如何确定 jogl 所需的 JNI 是否可用并在运行时工作吗?

0 投票
2 回答
824 浏览

java - 如何使用 JNI 向 JVM 公开 C ODBC 连接?

我正在使用调用 API 将 JRE 嵌入到现有的 C 应用程序中,并且我希望能够使用 JDBC 来处理该代码中的数据库。该应用程序是一个事务处理应用程序,数据库事务由应用程序的 C 部分中的代码管理,Java 代码必须在该事务中运行。这意味着我无法打开 连接,我必须重新使用现有连接。

那么,有没有办法在设置 JRE 时提供对现有 ODBC 连接句柄的 JDBC 访问?也许是一些 JDBC-ODBC 桥,但与现有的驱动程序不同,它可以设置为使用现有的连接和事务。

在我看来,我的其他选择如下:

  • 为应用程序中可能的每个 C 操作提供 java 等效项(由于很多原因,这是不可取的——我们有很多方法,复制它们是一件很痛苦的事情。

  • 编写我自己的 JDBC 驱动程序,用 JNI 包装 ODBC 连接。当然,这将是一个有趣的周末(月)项目,但我希望需要比这更快的事情完成。

帮助我,Stack-Overflow,你是我唯一的希望!

0 投票
4 回答
6567 浏览

java - 监视通过 JNI 用 Ja​​va 调用的 C DLL 的内存使用情况?

如何监视通过 JNI 从 Java 调用的本机 C DLL 正在使用的内存?使用标准 Java 监视工具和选项,我可以看到 Java 内存空间,但我无法查看 C DLL 使用的任何内存。Java 正在使用 ~70MB,但任务管理器中的任务显示 200Mb+,如果可能的话,我想看看额外的 130MB 中有什么。

0 投票
6 回答
7337 浏览

java - 从 Java 访问 iSeries 上的 RPG

有没有人从 Java 直接与运行在 V5R4 iSeries 机器上的 RPG 程序交谈的良好经验?如果是这样,社区的建议是什么,我应该尽量避免哪些陷阱?

从我尝试过的各种文献和尖峰解决方案来看,看起来我们可以使用 ProgramCallBeans(通过 PCML 或 xPCML)、与 DataQueues(用于异步通信)甚至 JNI 通信。

我正在寻找一种健壮、高性能、快速开发、易于维护和易于测试的东西(我们不都是!?!)。

0 投票
1 回答
309 浏览

dll - 使用 JNI 从 Java 打开 CDialog

我有一个应用程序需要打开一个在 DLL 中编写的 CDialog。问题是当在 DLL 中调用 DoModal() 时,程序崩溃并显示:“Debug Assertion Failed!”。有谁知道我怎样才能打开 CDialog?谢谢!

0 投票
3 回答
3178 浏览

c++ - 如何在 Windows Vista 中创建符号链接?

我希望在 Windows Vista/2008 机器上从 Java 创建符号链接(软链接)。我很高兴我需要调用 JNI 来执行此操作。不过,我正在寻求实际 C 代码的帮助。创建链接的适当系统调用是什么?非常感谢有关此主题的一些好的文档的指针。

0 投票
3 回答
2998 浏览

c++ - 如何在 C/C++ 中创建 JNIEnv 模拟

我正在用 C 语言编写一些希望使用 cunit 进行测试的 JNI 代码。为了调用 JNI 函数,我需要创建一个有效的 JNIEnv 结构。

有谁知道是否有用于此目的的模拟框架,或者谁能给我一些关于如何自己创建模拟 JNIEnv 结构的指示?

0 投票
4 回答
11332 浏览

java - 使用调用 API 的 JNI 内存管理

当我使用 JNI 方法构建 java 对象时,为了将它作为参数传递给我使用 JNI 调用 API 调用的 java 方法,我如何管理它的内存?

这是我正在使用的内容:

我有一个 C 对象,它的析构函数方法比free(). 这个 C 对象将与一个 Java 对象相关联,一旦应用程序完成了 Java 对象,我就不再需要 C 对象了。

我正在像这样创建 Java 对象(为清楚起见,省略了错误检查):

那么,既然我已经完成了instance,我该怎么办呢?理想情况下,我想把垃圾收集留给虚拟机;当它完成时,instance如果它还调用c_object_destroy()我提供给它的指针,那就太棒了。这可能吗?

一个单独但相关的问题与我在这样的方法中创建的 Java 实体的范围有关;我是否必须手动释放,比如说,,,classconstructor以上method?JNI 文档在正确内存管理的主题上令人沮丧地模糊(根据我的判断)。

0 投票
2 回答
5127 浏览

java - 为什么我的 JNI 代码没有成功找到 jthrowable 的 getMessage 方法?

我正在尝试访问 jthrowable 中的消息,同时处理我找不到类时生成的异常。但是,我无法访问 jthrowable 对象上 getMessage() 的消息 ID,我不知道为什么。我尝试将 getMessage 的签名更改为“()Ljava/lang/String”(最后没有分号,但这是必要的,对吧?)没有喜悦。我对此感到困惑。我什至尝试用 toString 替换 getMessage 但没有奏效。显然,我在这里做一些微不足道的错误。

这是我正在使用的代码:

此代码的输出(除其他外)如下所示:

说真的,我怎么到这里?!
线程“主”java.lang.NoClassDefFoundError 中的异常:com/planet/core360/docgen/Processor

javap -p -s java.lang.Throwable给了我这个:

编译自“Throwable.java”
public class java.lang.Throwable extends java.lang.Object implements java.io.Serializable{
...
public java.lang.String getMessage();
签名:()Ljava/lang/String;
...