使用JNA SetForeGroundWindow

问题描述 投票:1回答:1

目前,我正在尝试使用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)

我发现的唯一参考资料是NoSuchMethodError using JNA User32 platform map

几乎是相同的错误,解决方案是仅更改JNA和JNA平台的版本。但是,在我的Maven Dependencies中,平台和JNA都使用相同的版本。有人可以给我一些见识吗?我实际上真的很绝望,这就是为什么我在这里问。

目前,我正尝试使用JNA来设置非Java应用程序的焦点,我发现了以下代码。导入com.sun.jna.platform.win32.User32;导入com.sun.jna.platform.win32.WinDef.HWND; ...

java jna
1个回答
0
投票

[该异常指向您所链接的问题的直接错误原因,特别是您的项目找不到Native类的JNA 5.x版本(使用load(String, Class, Map)方法),这表明您使用的是较旧的错误类路径上load(String, Class, Map)类的版本。

© www.soinside.com 2019 - 2024. All rights reserved.