首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用JNA:无法访问com.sun.jna.Library

无法使用JNA:无法访问com.sun.jna.Library
EN

Stack Overflow用户
提问于 2021-05-05 21:07:45
回答 1查看 533关注 0票数 4

我正在尝试使用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。

代码语言:javascript
复制
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

    }
}

包结构:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 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
  • 此外,如果您扩展任何StructurePointerType之类的JNA类,您将需要将项目中包含这些子类的任何包opencom.sun.jna,因为它们使用反射来访问您的子类。(这里有多个选项,但open TestTest to com.sun.jna是最接近JDK8行为的。)我知道这只是一个测试设置,但是考虑一下您正在模块路径上使用JNA的反向DNS样式的包名和模块descriptors.

,您可能更喜欢使用jna-jpms-5.8.0jna-platform-jpms-5.8.0 JARs作为您的依赖项,因为它们有自己的模块JARs。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67401972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档