问题标签 [bridj]

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 投票
0 回答
400 浏览

java - 如何使用 Bridj 在 Java 中使用 C 代码

我是 Java 新手,我正在尝试在 Raspberry pi B+(armv6l) 上使用 Bridj 在 Java 中使用示例“Hello world”C 函数。我下载了 Bridj 源代码并使用 maven 安装它。然后我下载了 JNAerator 并从我的 C 代码中生成了一个 java 代码。现在我如何在我的java代码中使用这个生成的java。我还有一个 .so 库(C 二进制文件),我想在 java 中使用我尝试将这个 .so 放在 org/bridj/lib/linux_armhf/ 路径中,并尝试在我的代码中使用它,但它通过'sementation fault'。有人可以帮我解决这个问题。Bridj 也支持 RPI B+ 或者我应该使用 dyncall 来支持它。我没有 GUI,我在命令行上工作。

为了从 CI 中生成 java 代码,我正在使用:

用于编译我的 java 代码:

0 投票
1 回答
61 浏览

c++ - VC++中的“类”和类名之间是什么意思?

我有一个基于 VC++ 的第三方 DLL,我想在 Java 项目中使用它,以及它的头文件。我发现 BridJ 是一个很好的解决方案,但是标头非常复杂,以至于 JNAerator 窒息而死,只是在 100% CPU 时冻结,最后使用OutOfMemoryError: Java heap space. 所以我必须自己从标题中编写所需内容的绑定。

现在,我必须通过注释来指导 BridJ。为此,我查看了标题,发现有一个部分如下所示,我不明白:

所以,我想知道:SomethingStrange这里是什么意思?这是另一个子命名空间吗?以及如何在 BridJ 中正确连接?

0 投票
1 回答
1212 浏览

java - Pointer[Float] 类型的表达式不符合 Scala 中预期的 Pointer[Float] 类型

我是 Scala 的新手,我一直在尝试使用用 Java 实现的库 Bridj。
这是代码(allocateFloats 是类 org.bridj.Pointer 中的一个方法)

这将导致“Pointer[Float] 类型的表达式不符合预期的 Pointer[Float] 类型”。但是,如果我没有指定 aPtr 的类型,如下所示,代码会编译。

我试图在网上找到解决方案,但问题大多类似于“someClass[T1] 类型的表达式不符合预期的 someClass[T2] 类型”。但就我而言,它们是同一类型。
我真的很感激任何帮助。

0 投票
2 回答
999 浏览

jna - 在 JNA 调用中使用 ByteBuffer 表示字符串会导致缓冲区中出现额外字符

我正在使用 JNA 调用 dll,并使用 Jnaerator 生成代码。其中一种方法需要一个字符串,而 JNA 签名采用一个 ByteBuffer。

我尝试将 ByteBuffer 分配为直接 (ByteBuffer.allocateDirect) 和间接 (ByteBuffer.wrap),但在这两种情况下,有时到达 dll 的字符串具有额外的随机字符(例如 ReceiptÚeœ )。原始字节 [] 在那里(收据 = 52 65 63 65 69 70 74),但还有可变数量的附加随机字节(01 da 65 9c 19)。随机字符串是正确的,没有额外的字节。

我尝试了使用 BridJ 而不是 JNA 的等效代码(方法签名采用指针名称),在这种情况下它可以正常工作。不幸的是,我无法切换到 BridJ,因为我需要使用 com.sun.jna.platform.win32 类,除非我可以为这些类生成 BridJ 替代品(https://stackoverflow.com/questions/31658862/jnaerator-bridj -user32-缺少方法

本机声明:

JNAerator JNA代码:

Java 调用工作(但已弃用)

Java调用不工作测试A:

Java调用不工作测试B:

0 投票
0 回答
321 浏览

java - JVM通过运行jar文件崩溃,但在eclipse中运行项目很好

执行可运行的 jar 时,我遇到了 JVM 崩溃。但是项目运行/调试在 eclipse 中没有问题。任何人都可以帮助介绍如何追踪问题发生在哪里?谢谢。

以下是 JVM 核心转储信息:

0 投票
1 回答
616 浏览

java - JNA/BridJ 等中的分段错误

我已经使用 JNI、JNA、BridJ 和 JavaCPP 多次重建我的 Java/C++ 项目,并且每次遇到随机(不可预测的)分段错误。我已经验证了使用这个库的纯 C++ 可执行文件永远不会导致分段错误,并且在 BridJ 的情况下,通过显式调用它来将其缩小到 Java 的垃圾收集器。

一种想法是,这些库正在创建 Java 端指针对象,它们调用freedelete当它们被垃圾收集(通过finalize)而不是像在此应用程序中那样将 C++ 返回的指针视为借用引用。

但是我尝试了一个额外的测试(下面没有表示):我将 API 中的每个指针都转换为int64_t(long在 Java 中) 并在 C++ 中显式转换为适当的类型。我仍然看到罕见的段错误。

所以我的问题很广泛:什么可能导致这个问题?我将接受使用 JNA 或 BridJ 的答案,因为我可以轻松地在这两者之间切换。我认为我错过了一个基本问题,因为这个问题在我尝试过的所有库中都很普遍。

具体来说,这是我的 JNA 版本。我正在链接 CERN ROOT 库。RootTreeReader.h 是:

RootTreeReader.cpp 是:

他们的 Makefile 是

JNAerator 生成以下 RootTreeReaderLibrary.java:

我这样称呼它:

无论有没有显式的垃圾收集器调用,它都很少出现段错误。此段错误的 BridJ 版本很少没有并且经常使用显式垃圾收集器调用。

0 投票
1 回答
223 浏览

java - BridJ - Pointer.pointerToAddress(long peer) 已被弃用

GitHub 上的 BridJ 存储库中有一个名为TaskbarListDemo.java的示例。当我尝试使用从 Maven(版本 0.7.0)下载的.jar 库Pointer.pointerToAddress(long peer)在 Netbeans 中编译时,不推荐使用此示例中第 100 行中使用的方法。

在这种情况下使用的正确方法是什么?该文档没有对此进行任何解释。有这些选项可用(不标记为已弃用):

非常感谢!

0 投票
1 回答
899 浏览

java - 是否有可能在 Java 9 中获得 JavaFX 窗口的 HWND?

Java 9 将限制对私有 API 的任何访问。这意味着使用反射检索窗口 hwnd 的已知方法将不再起作用。

还有办法得到它们吗?我问是因为我有一个库,它提供了一个用于操作任务栏的 API(以类似于Java9提供的方式)。Java 9 API 仍然适用于 AWT,所以我希望我可以为 Java 9 和 JavaFX 设置我的项目。

我以前只调用私有方法,但这将停止工作。任何解决方案表示赞赏。如果可以使用 JNA 或 BridJ 完成本机调用,则可以。

0 投票
0 回答
315 浏览

java - 如何为伪造的抽象方法创建 Java 注释?

我说假是因为该方法没有被声明为抽象的,但它没有实现。

我正在尝试修复使用BridJ引入的错误。BridJ 使用自定义注解来注解 Android Activity 中的方法。该方法具有以下签名:

但是编译器抱怨Missing method body, or declare abstract这两行代码。所以我决定看一下注解的源代码,即:

在阅读了Java Custom Annotations之后,我看不出注释的定义有什么问题。无论如何,我在该helloLog()方法中添加了一个实现。

之后错误消失。我没想到它会解决这个问题,但是 FWIW,它允许我构建和运行,但它在启动时崩溃,因为NullPointerException我计划调查。

更新 1

@thomas-kläger 和其他人建议将native关键字添加到helloLog. 我试过了,但后来我得到了这个运行时错误:

我将阅读更多文档和示例。谢谢。

0 投票
1 回答
143 浏览

java - 如何在 Java/Scala 中正确缓存 Bridj JNI 对象

我正在寻找一些关于在多个 JNI 调用之间缓存和重用 Bridj JNI 对象的指南。我发现缓存 JNI 对象极大地加快了通过 JNI 调用 C 函数的速度,但它也会导致一些数值稳定性问题。基本上,有时具有相同参数的相同 C 函数会产生不同的结果。

我发现这个页面讨论了如何缓存 JNI 对象。http://www.latkin.org/blog/2016/02/01/jni-object-lifetimes-quick-reference/

有没有人在 BridJ 中这样做,关于如何缓存原语、结构、指针等的任何提示?