2

我最近一直在玩 Robot 类,我让它做我想做的事,但我还没有弄清楚如何通过用户输入来中断/停止它的动作。

例如:我想让它点击桌面一百次,但我决定点击四十次,我想让它退出(或暂停)。

我希望能够做一些简单的事情,比如按下某个键或按下鼠标中键来告诉它停止。为了做到这一点,它必须能够侦听 Java 应用程序之外的输入,因为机器人正在执行的操作是在其他程序中。

4

2 回答 2

4

正如爱德华所说,似乎没有办法完全按照我的要求去做。所以这个答案是为了解释我是如何实现一个可以接受的替代品的。

爱德华链接到的另一个问题指出

MouseInfo.getPointerInfo().getLocation()

无论鼠标在做什么,都能够获取鼠标坐标。我的程序使用机器人类在特定坐标范围内控制鼠标。我还希望能够通过用户输入禁用该程序。

为了达到这个结果,我将鼠标的 x 和 y 坐标与机器人上次设置的 x 和 y 坐标进行了比较。如果两者不匹配,则程序退出。

通过这种方法暂停程序是不切实际的,因为恢复需要在暂停之前返回到原始的 x 和 y 坐标,但它至少提供了一个示例,说明如何在不真正关注 java 父程序的情况下实现停止。

为了暂停程序,您可以将坐标与坐标范围进行比较(让坐标创建一个虚构的 2D 框)。如果鼠标的坐标在该范围内:暂停。要恢复,请进行相反的检查(鼠标不在该范围内)。

于 2011-10-06T06:56:06.490 回答
1

您也许可以使用此答案中的一些代码: Simulate a key down in Java

然后将监听器添加到任何动作、组件、调用机器人命令上的停止方法的任何内容。

这会给你一些启发吗?


编辑经过进一步讨论,真正的问题是:

如何响应 Java 应用程序内部的外部鼠标事件(Java 应用程序外部)?

似乎你不能没有本机代码和鼠标钩子,因为它依赖于操作系统。

如需进一步讨论,请参阅是否可以让 MouseMotionListener 监听所有系统鼠标运动事件?

于 2011-10-05T22:11:34.433 回答