目前,我正在尝试使用JNA将非Java应用程序设置为焦点,并且我发现了以下代码。
import com.sun.jna.platform.win32.User32;
import com.sun.jna.platform.win32.WinDef.HWND;
public class win32functions{
public static void setFocusToWindowsApp(String applicationTitle, int windowState) {
int state = windowState;
switch (state) {
default:
case 0:
state = User32.SW_SHOWNORMAL;
break;
case 1:
state = User32.SW_SHOWMAXIMIZED;
break;
case 2:
state = User32.SW_SHOWMINIMIZED;
break;
}
User32 user32 = User32.INSTANCE;
HWND hWnd = user32.FindWindow(null, applicationTitle);
if (user32.IsWindowVisible(hWnd)) {
if (state != User32.SW_SHOWMINIMIZED) {
user32.ShowWindow(hWnd, User32.SW_SHOWMINIMIZED);
}
user32.ShowWindow(hWnd, state);
user32.SetFocus(hWnd);
}
}
}
我还将以下依赖项放入我的pom.xml中,该项目是一个只有主文件的全新项目。
<properties>
<jna.version>5.5.0</jna.version>
</properties>
<dependencies>
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>${jna.version}</version>
</dependency>
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna-platform</artifactId>
<version>${jna.version}</version>
</dependency>
</dependencies>
这是我们的Programm入口点:
public class EntryPoint{
public static void main(String[] args) throws Exception
{
win32functions.setFocusToWindowsApp("Google Chrome", 0);
}
}
理论上,在编译/运行Programm时,应该只将其放在运行时打开的Google Chrome上。
但是,Java给出以下错误消息:
Exception in thread "main" java.lang.NoSuchMethodError: 'com.sun.jna.Library com.sun.jna.Native.load(java.lang.String, java.lang.Class, java.util.Map)'
at com.sun.jna.platform.win32.User32.<clinit>(User32.java:49)
at win32functions.setFocusToWindowsApp(win32functions.java:21)
at EntryPoint.main(EntryPoint.java:16)
几乎是相同的错误,解决方案是仅更改JNA和JNA平台的版本。但是,在我的Maven Dependencies中,平台和JNA都使用相同的版本。有人可以给我一些见识吗?我实际上真的很绝望,这就是为什么我在这里问。
目前,我正尝试使用JNA来设置非Java应用程序的焦点,我发现了以下代码。导入com.sun.jna.platform.win32.User32;导入com.sun.jna.platform.win32.WinDef.HWND; ...
[该异常指向您所链接的问题的直接错误原因,特别是您的项目找不到Native
类的JNA 5.x版本(使用load(String, Class, Map)
方法),这表明您使用的是较旧的错误类路径上load(String, Class, Map)
类的版本。