在第一次尝试使用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);
答案 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>