Java 使用JNA SetForeGroundWindow
目前,我正在尝试使用JNA将非Java应用程序设置为focus,我发现了以下代码Java 使用JNA SetForeGroundWindow,java,jna,Java,Jna,目前,我正在尝试使用JNA将非Java应用程序设置为focus,我发现了以下代码 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) {
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>
理论上,在编译/运行程序时,应该只关注运行时打开的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)
线程“main”java.lang.NoSuchMethodError中的异常:'com.sun.jna.Library com.sun.jna.Native.load(java.lang.String、java.lang.Class、java.util.Map)'
位于com.sun.jna.platform.win32.User32.(User32.java:49)
在win32functions.setFocusToWindowsApp(win32functions.java:21)
在EntryPoint.main(EntryPoint.java:16)
我对这个问题唯一的看法是
这几乎是相同的错误,解决方案是只更改JNA和JNA平台的版本。
然而,在我的Maven依赖中,我对平台和JNA使用相同的版本。有人能给我一些见解吗?我真的很绝望,这就是我在这里提问的原因。异常指向与您的链接问题相同的直接错误原因,具体来说,您的项目找不到JNA 5.x版本的
本机
类(使用该方法),建议在类路径上使用较旧版本的com.sun.jna.Native
类
看起来您已经怀疑了这一点,您的pom.xml
摘录单独来看似乎是正确的,但是您没有提供足够的上下文来了解是否存在另一个导致加载错误版本的常见错误。以下操作之一应有助于解决您的问题:
- 确保在项目的最高级别
文件中首先列出了pom.xml
和jna
依赖项。如果您有任何其他依赖项可传递地加载早期版本的JNA,那么它们可能会首先处理这些依赖项jna平台
- 确保已执行命令,根据最新的
文件更新/刷新/重新加载项目依赖项。pom.xml
- 如果您使用的是命令行,
或mvn安装
应该可以完成这一任务mvn包
- 如果您使用的是IDE,请寻找一个菜单命令来完成此操作。例如,在Eclipse中,您需要使用
Maven>updateproject
- 如果您使用的是命令行,
- 确保您没有在类路径上手动指定任何其他jar/包(特别是在Maven之外),其中包括旧的
。弹簧靴是这里常见的罪魁祸首Native.jar
- 尝试让它重新生成,以防您有一个较旧的缓存版本,并且由于某种原因更新失败
本机
类(使用该方法),这表明您的类路径上有一个较旧版本的com.sun.JNA.Native
类
看起来您已经怀疑了这一点,您的pom.xml
摘录单独来看似乎是正确的,但是您没有提供足够的上下文来了解是否存在另一个导致加载错误版本的常见错误。以下操作之一应有助于解决您的问题:
- 确保在项目的最高级别
文件中首先列出了pom.xml
和jna
依赖项。如果您有任何其他依赖项可传递地加载早期版本的JNA,那么它们可能会首先处理这些依赖项jna平台
- 确保已执行命令,根据最新的
文件更新/刷新/重新加载项目依赖项。pom.xml
- 如果您使用的是命令行,
或mvn安装
应该可以完成这一任务mvn包
- 如果您使用的是IDE,请寻找一个菜单命令来完成此操作。例如,在Eclipse中,您需要使用
Maven>updateproject
- 如果您使用的是命令行,
- 确保您没有在类路径上手动指定任何其他jar/包(特别是在Maven之外),其中包括旧的
。弹簧靴是这里常见的罪魁祸首Native.jar
- 尝试让它重新生成,以防您有一个较旧的缓存版本,并且由于某种原因更新失败
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)