问题标签 [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.
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 代码:
c++ - VC++中的“类”和类名之间是什么意思?
我有一个基于 VC++ 的第三方 DLL,我想在 Java 项目中使用它,以及它的头文件。我发现 BridJ 是一个很好的解决方案,但是标头非常复杂,以至于 JNAerator 窒息而死,只是在 100% CPU 时冻结,最后使用OutOfMemoryError: Java heap space
. 所以我必须自己从标题中编写所需内容的绑定。
现在,我必须通过注释来指导 BridJ。为此,我查看了标题,发现有一个部分如下所示,我不明白:
所以,我想知道:SomethingStrange
这里是什么意思?这是另一个子命名空间吗?以及如何在 BridJ 中正确连接?
java - Pointer[Float] 类型的表达式不符合 Scala 中预期的 Pointer[Float] 类型
我是 Scala 的新手,我一直在尝试使用用 Java 实现的库 Bridj。
这是代码(allocateFloats 是类 org.bridj.Pointer 中的一个方法)
这将导致“Pointer[Float] 类型的表达式不符合预期的 Pointer[Float] 类型”。但是,如果我没有指定 aPtr 的类型,如下所示,代码会编译。
我试图在网上找到解决方案,但问题大多类似于“someClass[T1] 类型的表达式不符合预期的 someClass[T2] 类型”。但就我而言,它们是同一类型。
我真的很感激任何帮助。
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:
java - JVM通过运行jar文件崩溃,但在eclipse中运行项目很好
执行可运行的 jar 时,我遇到了 JVM 崩溃。但是项目运行/调试在 eclipse 中没有问题。任何人都可以帮助介绍如何追踪问题发生在哪里?谢谢。
以下是 JVM 核心转储信息:
java - JNA/BridJ 等中的分段错误
我已经使用 JNI、JNA、BridJ 和 JavaCPP 多次重建我的 Java/C++ 项目,并且每次遇到随机(不可预测的)分段错误。我已经验证了使用这个库的纯 C++ 可执行文件永远不会导致分段错误,并且在 BridJ 的情况下,通过显式调用它来将其缩小到 Java 的垃圾收集器。
一种想法是,这些库正在创建 Java 端指针对象,它们调用free
或delete
当它们被垃圾收集(通过finalize
)而不是像在此应用程序中那样将 C++ 返回的指针视为借用引用。
但是我尝试了一个额外的测试(下面没有表示):我将 API 中的每个指针都转换为int64_t
(long
在 Java 中) 并在 C++ 中显式转换为适当的类型。我仍然看到罕见的段错误。
所以我的问题很广泛:什么可能导致这个问题?我将接受使用 JNA 或 BridJ 的答案,因为我可以轻松地在这两者之间切换。我认为我错过了一个基本问题,因为这个问题在我尝试过的所有库中都很普遍。
具体来说,这是我的 JNA 版本。我正在链接 CERN ROOT 库。RootTreeReader.h 是:
RootTreeReader.cpp 是:
他们的 Makefile 是
JNAerator 生成以下 RootTreeReaderLibrary.java:
我这样称呼它:
无论有没有显式的垃圾收集器调用,它都很少出现段错误。此段错误的 BridJ 版本很少没有并且经常使用显式垃圾收集器调用。
java - BridJ - Pointer.pointerToAddress(long peer) 已被弃用
GitHub 上的 BridJ 存储库中有一个名为TaskbarListDemo.java的示例。当我尝试使用从 Maven(版本 0.7.0)下载的.jar 库Pointer.pointerToAddress(long peer)
在 Netbeans 中编译时,不推荐使用此示例中第 100 行中使用的方法。
在这种情况下使用的正确方法是什么?该文档没有对此进行任何解释。有这些选项可用(不标记为已弃用):
非常感谢!
java - 是否有可能在 Java 9 中获得 JavaFX 窗口的 HWND?
Java 9 将限制对私有 API 的任何访问。这意味着使用反射检索窗口 hwnd 的已知方法将不再起作用。
还有办法得到它们吗?我问是因为我有一个库,它提供了一个用于操作任务栏的 API(以类似于Java9提供的方式)。Java 9 API 仍然适用于 AWT,所以我希望我可以为 Java 9 和 JavaFX 设置我的项目。
我以前只调用私有方法,但这将停止工作。任何解决方案表示赞赏。如果可以使用 JNA 或 BridJ 完成本机调用,则可以。
java - 如何为伪造的抽象方法创建 Java 注释?
我说假是因为该方法没有被声明为抽象的,但它没有实现。
我正在尝试修复使用BridJ引入的错误。BridJ 使用自定义注解来注解 Android Activity 中的方法。该方法具有以下签名:
但是编译器抱怨Missing method body, or declare abstract
这两行代码。所以我决定看一下注解的源代码,即:
在阅读了Java Custom Annotations之后,我看不出注释的定义有什么问题。无论如何,我在该helloLog()
方法中添加了一个实现。
之后错误消失。我没想到它会解决这个问题,但是 FWIW,它允许我构建和运行,但它在启动时崩溃,因为NullPointerException
我计划调查。
更新 1
@thomas-kläger 和其他人建议将native
关键字添加到helloLog
. 我试过了,但后来我得到了这个运行时错误:
我将阅读更多文档和示例。谢谢。
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 中这样做,关于如何缓存原语、结构、指针等的任何提示?