Java中的事件侦听器而应用程序没有焦点?(全局按键检测)

Java中的事件侦听器而应用程序没有焦点?(全局按键检测),java,java-native-interface,listener,keylistener,Java,Java Native Interface,Listener,Keylistener,我已经搜索了一段时间,每个人似乎都认为仅仅使用Java是不可能的,所以我将试一试;) 当另一个不相关的应用程序具有窗口焦点时,有没有办法让我的Java应用程序侦听事件(特别是关键事件)?在我的情况下,我希望检测用户何时按下键盘上的“暂停”键,即使我的Java应用程序没有焦点 我听一些人提到,唯一的方法是编写一些C代码并使用JNI。只是好奇有没有人知道如何避免这种情况?或者,如果不是,至少是一个关于c/JNI的非常好的教程 谢谢据我所知,这是办不到的。在基本级别上,JVM只为它接收的O/S事件生成

我已经搜索了一段时间,每个人似乎都认为仅仅使用Java是不可能的,所以我将试一试;)

当另一个不相关的应用程序具有窗口焦点时,有没有办法让我的Java应用程序侦听事件(特别是关键事件)?在我的情况下,我希望检测用户何时按下键盘上的“暂停”键,即使我的Java应用程序没有焦点

我听一些人提到,唯一的方法是编写一些C代码并使用JNI。只是好奇有没有人知道如何避免这种情况?或者,如果不是,至少是一个关于c/JNI的非常好的教程


谢谢

据我所知,这是办不到的。在基本级别上,JVM只为它接收的O/S事件生成事件,并且只有当它有焦点时才接收O/S输入事件


我相信您可以使用JNI触发O/S来为所有输入生成事件,但这将非常依赖于O/S。

我也不知道有什么方法可以绕过它。我确实找到了一个很好的例子,说明了如何设置JNI的东西并制作一个全局键盘处理程序(这里添加的太多了)。虽然有点过时(2005年),但这个例子看起来足够全面,足以让您开始学习。

以下是我找到的最佳答案:

" 有一个用于处理本机键盘和鼠标控制的库: )

+1。如果没有JNI或JVM之外的其他访问,我会非常惊讶。您可以使用com.melloware.jintellitype包中的类。这样,您就可以一直使用capcure键输入。但您需要为本机函数添加一些.dll文件,但在Maven中找不到它:(它位于Maven上的com.1stlegJnativeHook下)。