我正在尝试使用JNA,因为我想使用用c++编写的.dll,而我的其余代码是用Java语言编写的。但是,如果我尝试导入JNA类,Eclipse会声称“类型com.sun.jna.Library不可访问”。
我的集成开发环境似乎看到JNA以某种方式在我的库中,因为当我输入"import com.sun.j“时,它会向我建议.jar文件中的.jna和其他包。
我已经创建了一个单独的项目,看看它是否在那里工作,但它就是不工作。
我已经从jna Github (https://github.com/java-native-access/jna/blob/master/README.md )下载了最新的平台(jna-5.8.0.jar和jna- .jar -5.8.0.jar)文件,并通过项目->配置构建路径->添加外部.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发布于 2021-05-07 06:10:17
正如@greg-449在注释中提到的,您有一个模块化项目,通过src目录(包根目录)中存在的module-info.java文件来表示。
这里有三个选项:
在JRE8或更早版本上运行(或将您的项目兼容级别更改为)
module-info.java模块描述符,以便在没有模块的情况下运行您的程序
module-info.java)以添加指令requires com.sun.jna。如果您使用的是jna-platform,那么还要添加requires com.sun.jna.platform。Structure或PointerType之类的JNA类,您将需要将项目中包含这些子类的任何包open到com.sun.jna,因为它们使用反射来访问您的子类。(这里有多个选项,但open TestTest to com.sun.jna是最接近JDK8行为的。)我知道这只是一个测试设置,但是考虑一下您正在模块路径上使用JNA的反向DNS样式的包名和模块descriptors.
,您可能更喜欢使用jna-jpms-5.8.0和jna-platform-jpms-5.8.0 JARs作为您的依赖项,因为它们有自己的模块JARs。
https://stackoverflow.com/questions/67401972
复制相似问题