当前位置: 首页 > 知识库问答 >
问题:

使用JNA SetForeGroundWindow

麻茂材
2023-03-14

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

这是我们的程序入口点:

public class EntryPoint{

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

理论上,在编译/运行时,程序应该只关注运行时打开的谷歌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 User32平台映射的NoSuchMethodError

这几乎是相同的错误,解决方案是只更改JNA和JNA平台的版本。然而,在我的Maven依赖中,我对平台和JNA使用相同的版本。有人能给我一些见解吗?我真的很绝望,这就是为什么我在这里问。

共有1个答案

栾和风
2023-03-14

异常指向与链接问题相同的直接错误原因,具体来说,您的项目无法找到JNA 5。原生类的x版本(带有load(String,class,Map)方法),表明您有一个较旧版本的com。太阳jna。类路径上的本机类。

看起来你已经怀疑了这一点,还有你的pom。xml摘录单独来看是正确的,但您没有提供足够的上下文来了解是否存在另一个导致加载错误版本的常见错误。以下操作之一应有助于解决您的问题:

  • 确保您已经在最高级别的pom中首先列出了jna和jna平台的依赖关系。xml文件。如果您有任何其他依赖项可传递地加载早期版本的JNA,那么它们可能会首先处理它们
 类似资料:
  • 有没有办法在使用 jongo 查询 MongoDB 时添加 ?我发现这样的错误 - '排序超出了 104857600 字节的内存限制,但没有选择加入外部排序。正在中止操作。传递 allowDiskUse:true 可以选择加入,可以通过以下方式阻止,您的聚合看起来像 但据我所知,Jongo 中的类仅将管道应用于自身,然后您可以使用 方法执行。 是否有任何方法可以将该参数传递给mongo而不从Jon

  • 问题内容: 我在远程服务器上有一个管理Web应用程序。该应用程序是使用MEAN堆栈编写的,我列出了连接到Web应用程序所需的所有RESTful路由。 我正在编写一个Java客户端应用程序,该应用程序需要从该管理应用程序发送和接收数据。如果我具有服务器的IP地址和REST路由,如何将客户端连接到Web应用程序? 我想我需要提供到服务器和REST API文件的URL连接,然后仅调用诸如和的路由功能。

  • 问题内容: 我使用spring数据和方法来获取模型。调用此方法时如何使用查询提示? 上面的源代码工作正常,但是我不能为我的JPA提供程序(在我的情况下为EclipseLink)设置QueryHint。 以上是我使用spring-data使用查询提示的方式, 我还发现了这个尚未解决的问题。 问题答案: 当我想使用spring-data创建查询时,请遵循上述算法。 1)是否已经提供的查询 通过弹簧数据

  • 我使用spring数据和方法获取模型。调用此方法时如何使用查询提示 上面的源代码运行良好,但我无法为我的JPA提供者(在我的例子中是EclipseLink)设置QueryHint。 我使用spring数据使用查询提示的方式如下:, 我也发现这个还没有解决。

  • 通过io的requestAbs方法调用/调用/使用REST API的vertx实现。vertx。果心http。vertx-core-3.2.0中的HttpClient类。jar导致HTTP错误::302,响应数据为HTML Erro响应。 不确定requestAbs方法的行为,因为没有引发异常,也没有写入任何日志。此外,还随附了使用vertx JAR的此方法的源代码。如果方法实现有bug,是否有问

  • 问题内容: 说我有: 我该如何使用表单外部的“提交”按钮提交该表单,我认为在HTML5中有一个“提交”的动作属性,但是我不确定那是否是完全跨浏览器的,如果不是这样的话,做这个? 问题答案: 一个对我来说很好的解决方案,在这里仍然缺少。它需要具有目视隐藏或元件whithin的,和相关的它元件外部。它看起来像这样: 现在,此链接使您可以通过单击元素来“单击”表单元素。

  • 在Hamcrest中有没有一种方法可以比较一个数字范围内的一个数字?我在找这样的东西:

  • 首先创建一个静态页面 index.html 和一个 JS 入口文件 entry.js: <!-- index.html --> <html> <head> <meta charset="utf-8"> </head> <body> <script src="bundle.js"></script> </body> </html> // entry.js document.write('It