我正在尝试使用 JNA,因为我想使用一个用 c++ 编写的 .dll,而我的其余代码是用 Java 编写的。但是,如果我尝试导入 JNA 类 Eclipse 声称“com.sun.jna.Library 类型不可访问”。
我的 IDE 似乎发现 JNA 在我的库中,因为当我键入“import com.sun.j”时,它会向我建议 .jna 和 .jar 文件中的其他包。
我创建了一个单独的项目来查看它是否在那里工作,但它只是不起作用。
我从 jna Github ( https://github.com/java-native-access/jna/blob/master/README.md ) 下载了最新的 .jar (jna-5.8.0.jar 和 jna-platform-5.8.0.jar) 文件,并通过 project-> configure 将它们添加到类路径中构建路径 -> 添加外部 JAR
我正在使用带有 javaSE-13 的 Eclipse。
package Testtest;
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Platform;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
封装结构:Test
|-- src
| |-- TestTest
| | |-- Main.java
| |-- module-info.java
|-- JRE System Library [JavaSE-13]
|-- Referenced Libraries
|-- jna-5.8.0.jar
|-- jna-platform-5.8.0.jar
最佳答案
如@greg-449评论中提到,您有一个模块化项目,由 module-info.java
的存在表示。文件在您的src
目录(包根目录)。
您在这里有三个选择:
module-info.java
的 JRE 8 或更早版本上运行(或将您的项目兼容级别更改为) module-info.java
模块描述符,以便在没有模块的情况下运行您的程序 module-info.java
)添加指令 requires com.sun.jna
.如果您使用 jna-platform
然后还添加 requires com.sun.jna.platform
.Structure
或 PointerType
您将需要 open
项目中包含 com.sun.jna
的那些子类的任何包因为他们使用反射来访问您的子类。 (这里有多个选项,但 open TestTest to com.sun.jna
是最接近 JDK8 的行为。)。我知道这只是一个测试设置,但考虑一个反向 DNS 样式的包名称和模块描述符。 jna-jpms-5.8.0
和 jna-platform-jpms-5.8.0
JAR 作为您的依赖项,因为它们有自己的模块描述符。 关于java - 无法使用 JNA : com. sun.jna.Library 不可访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67401972/