首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JNA SetForeGroundWindow

使用JNA SetForeGroundWindow
EN

Stack Overflow用户
提问于 2020-01-06 05:14:47
回答 1查看 562关注 0票数 1

目前,我正在尝试使用JNA将非Java应用程序设置为焦点,并找到了以下代码。

代码语言:javascript
复制
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中,该项目是一个新的项目,只有一个主文件。

代码语言:javascript
复制
<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>

这是我们的节目入口点:

代码语言:javascript
复制
public class EntryPoint{

    public static void main(String[] args) throws Exception
    {
          win32functions.setFocusToWindowsApp("Google Chrome", 0);
    }
}

从理论上讲,在编译/运行程序时,应该只关注Google,它是在运行时打开的。

但是,Java提供了以下错误消息:

代码语言:javascript
复制
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依赖项im中,对平台和JNA都使用了相同的版本。有人能给我一些洞察力吗?我真的很绝望,所以我才来这里问你。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-06 17:57:33

异常指向相同的即时错误原因,具体而言,您的项目找不到Native类的JNA5.x版本(使用load(String, Class, Map)方法),这意味着您的类路径上有一个较旧版本的com.sun.jna.Native类。

看起来您已经怀疑了这一点,并且您的pom.xml摘录在隔离状态下看起来是正确的,但是您还没有给出足够的上下文来了解是否有另一个导致加载错误版本的常见错误。下列操作之一应有助于解决您的问题:

  • 确保在项目中的最高级别pom.xml文件中首先列出了jnajna-platform依赖项。如果您有任何其他依赖项可以临时加载早期版本的JNA,它们可能首先处理这些依赖项。
  • 确保您已经执行了一个命令,根据最新的pom.xml文件更新/刷新/重新加载项目依赖项。
    • 如果使用命令行,则mvn installmvn package应完成此操作;如果使用IDE,则使用
    • ,请查找菜单命令来完成此操作。例如,在Eclipse中,您需要使用Maven > Update Project.

  • 确保您没有在类路径(特别是Maven外部)上手动指定包含旧Native.jar的任何其他jar/包。Spring是这里常见的罪魁祸首。
  • 尝试deleting your maven repository cache并让它重新构建,以防您有一个较旧的缓存版本,并且由于某种原因更新失败。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59606969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档