【问题标题】:Can't get started with JNA无法开始使用 JNA
【发布时间】:2019-09-27 23:32:01
【问题描述】:

我刚刚在 Win10 x64 上安装了 Apache NetBeans IDE 11.1、JDK 13、openjfx-13 和 JNA-platform-5.4.0。我无法使用 JNA 到达一垒。以下代码在 com.sun.jna.Native 的导入语句中将 Native 标记为未知符号。对 Native.load 的调用和导入语句直接取自 https://github.com/java-native-access/jna/blob/master/www/GettingStarted.md

此屏幕截图显示项目库列表1

package jrailroad;

import com.sun.javafx.PlatformUtil;
import com.sun.jna.platform.win32.Kernel32;
import com.sun.jna.platform.win32.Kernel32Util;
import com.sun.jna.Native;

public class ComPort
{                           // class ComPort
public int os;

public static final int OS_WINDOWS = 0;     // a Windows platform
public Kernel32 k32 = null;

ComPort()
    {                       // ComPort.ComPort
    os = -1;
    if (PlatformUtil.isWindows())
        {                   // windows
        os = OS_WINDOWS;
        k32 = (Kernel32) Native.load("kernel32", Kernel32.class);
        }                   // windows
    }                       // ComPort.ComPort
}                           // class ComPort

【问题讨论】:

标签: jna


【解决方案1】:

正如您发布的Getting Started 链接所述,

Java Native Access (JNA) 有一个组件 jna.jar;这 支持本机库 (jnidispatch) 包含在 jar 文件中。 ...首先下载最新版本的 JNA 并参考 jna.jar 在项目的 CLASSPATH 中。

您没有包含jna.jar,而是包含了用户提供的到各种平台的映射jna-platform.jarlink you noted in your comment 包含指向这两个文件的链接:

JNA

jna-5.4.0.jar

这是 JNA 的核心工件,仅包含绑定库 和核心帮助类。

JNA 平台

jna-platform-5.4.0.jar

此工件包含跨平台映射和数字映射 常用平台功能,包括大量Win32 映射以及一组简化本机的实用程序类 访问。

正如 cmets 中所述,当您的依赖项本身具有依赖项时,手动包含 jar 文件很快就会变得不可持续。您应该学习如何使用包管理器,例如 Maven、Gradle 或 Ivy。您的 IDE 对此有一个流程,只需搜索“netbeans maven”即可获得更多指导。

【讨论】:

  • 我强烈建议使用包管理器来处理库。 JNA 的 maven 工件包含正确的依赖关系信息,并且拉入 jna-platform 拉入 jna 作为传递依赖项。我更喜欢 maven,但 gradle 和 ivy 也应该做正确的事情。
  • @MatthiasBläsing 我赞同使用包管理器的建议(并编辑了答案),但建议不要依赖传递依赖,因为如果您的项目依赖解析可能会引入旧版本的 jna.jar有另一个使用早期版本的 JNA 的依赖项(例如 SpringBoot)。例如,请参阅most of these issues
  • @DanielWiddis 我仍然建议使用间接依赖。这些问题可以很容易地使用例如来自 maven-enforcer-plugin 的 reactorModuleConvergence 规则。
猜你喜欢
  • 2010-10-22
  • 1970-01-01
  • 2015-11-08
  • 2013-02-09
  • 2013-02-25
  • 1970-01-01
  • 2021-09-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多