我最近一直在玩Robot类,我已经做了我想做的事,但我还没想出如何通过用户输入来中断/停止它的动作。
例如:我希望它点击桌面一百次,但我决定点击四十次,我想让它退出(或暂停)。
我希望能够做一些简单的事情,比如按某个键或按下鼠标中键以告诉它停止。为此,它必须能够侦听Java应用程序之外的输入,因为Robot正在执行的操作在其他程序中。
答案 0 :(得分:4)
正如爱德华所说,似乎没有办法完全按照我的意愿去做。所以这个答案是为了解释我是如何取得可接受的替代品的。
与爱德华有关的另一个问题已经表明了
MouseInfo.getPointerInfo().getLocation()
无论鼠标在做什么,都能够获取鼠标坐标。我的程序使用机器人类来控制特定坐标范围内的鼠标。我还希望能够通过用户输入禁用该程序。
为了达到这个效果,我将鼠标的x和y坐标与机器人最后设置的x和y坐标进行了比较。如果两者不匹配,程序退出。
通过这种方法暂停程序是不切实际的,因为恢复需要在暂停之前返回到原始的x和y坐标,但它至少给出了一个如何实现停止而不实际关注java父级的示例程序
为了暂停程序,您可以将坐标与坐标范围进行比较(让坐标创建一个虚构的2D框)。如果鼠标的坐标在该范围内:暂停。要恢复,请执行相反的检查(鼠标不在该范围内)。
答案 1 :(得分:1)
您可以使用此答案中的一些代码: Simulate a key held down in Java
然后将侦听器添加到任何动作,组件,以及在机器人命令上调用stop方法的任何内容。
这会为你提供一些灵感吗?
编辑经过进一步讨论后,真正的问题是:
如何在Java应用程序内响应外部鼠标事件(Java应用程序之外)?
看起来你不能没有原生代码和鼠标钩子,因为它是操作系统依赖的。
如需进一步讨论,请参阅Is it possible to have a MouseMotionListener listen to all system mouse motion events?