当前位置:  开发笔记 > 编程语言 > 正文

在Java中搜索没有焦点的输入

如何解决《在Java中搜索没有焦点的输入》经验,为你挑选了2个好方法。

我正在使用Robot类在Java中创建一个小程序.该程序接管鼠标.在调试过程中,如果它开始以我不想要的方式运行,很难退出程序,因为我无法将鼠标移动到eclipse中的终止按钮,我不能使用热键来点击它是因为鼠标在另一个窗口中不断点击,而是让窗口聚焦.

我想做的就是连接一个keylistener,这样当我点击q时我可以退出该程序,但我知道如何做到这一点的唯一方法是创建一个窗口,该窗口需要焦点来捕获输入.有没有办法从任何地方听取键盘或鼠标输入,无论焦点是什么?



1> MasterID..:

有一个库为您做了艰苦的工作:https: //github.com/kwhat/jnativehook


@CollinBell该库使用每个操作系统的本机方法来完成所述任务.还有其他库可以做类似的事情.我认为说Java生态系统确实提供了一种简单的方法,这是不准确的.有人已经不遗余力地建立第三方库来完成这项任务,它不是任何标准Java包的一部分.

2> ldog..:

这不是一个微不足道的问题,Java也没有给你一个优雅的方法.您可以使用像banjollity建议的解决方案但是如果您的错误鼠标点击打开当前在任务栏中打开的另一个完整大小的窗口,那么即使这样也不会一直有效.

事实上,Java默认情况下为开发人员提供了很少的操作系统控制权.这是由于两个主要原因:安全性(由java文档引用)以及不同操作系统完全不同地处理事件并使一个统一模型代表所有这些可能没有多大意义的事实.

所以为了回答你的问题,我想你想要的是你的程序的某种行为,它在全局范围内监听按键,而不仅仅是在你的应用程序中.这样的事情将要求您访问您选择的操作系统提供的功能,并且要用Java访问它,您将需要通过Java Native Interface(JNI)层来实现它.

所以你想要做的是:

    在C中实现一个程序,它将监听操作系统上的全局按键,如果这个操作系统是Windows而不是在Windows钩子上查找文档,而这些文档是由Microsoft和MSDN在Web和其他地方编写的.如果您的操作系统是Linux或Mac OS X,那么您将需要使用X11开发库来监听全局按键.根据我在http://ubuntuforums.org/showthread.php?t=864566上写的Howto,这可以在ubunutu linux发行版上完成.

    通过JNI将C代码连接到Java代码.这一步实际上是更容易的一步.按照我在http://ubuntuforums.org/showthread.php?t=864566的教程中使用的程序在windows和linux下进行操作,因为在两个操作系统上将C代码连接到Java代码的过程都是相同的.

需要记住的重要一点是,如果您首先编写和调试C/C++代码并确保它正常工作,则更容易使JNI代码正常工作.然后将它与Java集成很容易.

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有