使用JNA User32平台地图的NoSuchMethodError

时间:2018-11-08 22:54:31

标签: java intellij-idea jna user32

在第一次尝试使用User32.Instance时收到以下错误:

  

线程“ main”中的异常java.lang.NoSuchMethodError:com.sun.jna.Native.load(Ljava / lang / String; Ljava / lang / Class; Ljava / util / Map;)Lcom / sun / jna /图书馆;
    com.sun.jna.platform.win32.User32。(User32.java:48)

尝试运行Windows User32类函数的JNA预定义映射。

我尝试运行以下代码:

HWND hwnd = User32.INSTANCE.FindWindow(null,"new 2 - Notepad++");
User32.INSTANCE.SetForegroundWindow(hwnd);

我是否必须声明自己的接口,还是可以使用jna平台中的User32 JNA映射?我在做什么错了?

编辑:com.sun.jna.platform.win32.user32的该行中的错误:

User32 INSTANCE = Native.load("user32", User32.class, W32APIOptions.DEFAULT_OPTIONS);

3 个答案:

答案 0 :(得分:1)

在我的项目中,当以下三个依赖同时存在时会出现这个错误。我将 tess4j 依赖移到最后一个,它可以工作。

<dependency>
           <groupId>net.sourceforge.tess4j</groupId>
           <artifactId>tess4j</artifactId>
           <version>3.4.0</version>
</dependency>
<dependency>
           <groupId>com.sun.jna</groupId>
           <artifactId>jna</artifactId>
           <version>4.4.0</version>
           <scope>system</scope>
           <systemPath>${project.basedir}\src\resources\lib\opencv\jna- 
           4.4.0.jar</systemPath>
</dependency>
<dependency>
            <groupId>com.sun.jna.paltform</groupId>
            <artifactId>paltform</artifactId>
            <version>4.4.0</version>
            <scope>system</scope>
            <systemPath>${project.basedir}\src\resources\lib\opencv\jna-platform-4.4.0.jar</systemPath>
</dependency>
    

答案 1 :(得分:0)

我能够通过对旧的jna软件包(5.0.0之前版本)和新的jna-platform软件包(5.0.0)进行编译来重现此错误:

Exception in thread "main" java.lang.NoSuchMethodError: com.sun.jna.Native.load(Ljava/lang/String;Ljava/lang/Class;Ljava/util/Map;)Lcom/sun/jna/Library;
    at com.sun.jna.platform.win32.User32.<clinit>(User32.java:48)
    at sandboxjava.Main.main(Main.java:8)

问题是JNA在版本5.0.0中弃用了Native.loadLibrary方法,并引入了Native.load方法。较新的jna-platform软件包使用了new方法,但是由于jna软件包是较旧的版本,因此load方法根本不存在于软件包中。

您应该将jna软件包升级到5.0.0(在撰写本文时为最新),或将jna-platform降级到5.0.0之前的版本。

答案 2 :(得分:0)

使用以下依赖项更新Maven,对我有用。

    <dependency>
        <groupId>net.java.dev.jna</groupId>
        <artifactId>jna</artifactId>
        <version>4.5.1</version>
    </dependency>