在第一次尝试使用User32.Instance时,我收到了以下错误:
线程"main“java.lang.NoSuchMethodError: java.lang.NoSuchMethodError中的异常 在com.sun.jna.platform.win32.User32.(User32.java:48)
同时试图运行一个JNA预定义的映射的视窗User32类函数。
我尝试运行以下代码:
HWND hwnd = User32.INSTANCE.FindWindow(null,"new 2 - Notepad++");
User32.INSTANCE.SetForegroundWindow(hwnd);我是否必须声明我自己的接口,还是我能够使用位于JNA平台中的User32 jna映射?我做错什么了?
编辑:错误出现在com.sun.jna.platform.win32.user 32中的一行:
User32 INSTANCE = Native.load("user32", User32.class, W32APIOptions.DEFAULT_OPTIONS);发布于 2018-11-10 11:42:26
通过编译一个旧的jna包(预-5.0.0)和一个新的jna-platform包(5.0.0),我能够重现这个bug:
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包使用新方法,但由于jna包是旧版本,所以包中根本不存在load方法。
您应该将jna包升级到5.0.0 (撰写本文时最晚),或者将jna-platform降级到5.0.0之前的版本。
发布于 2019-10-03 10:18:11
使用下面的依赖项更新maven,它对我有效。
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>4.5.1</version>
</dependency>发布于 2021-08-09 10:10:36
在我的项目中,当以下三个依赖项同时存在时,会发生此错误。我将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>https://stackoverflow.com/questions/53217390
复制相似问题