【问题标题】:Listeners in conjunction with Robot class侦听器与 Robot 类一起使用
【发布时间】:2011-10-05 21:58:47
【问题描述】:

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

例如:我希望它单击桌面一百次,但我决定单击四十次以使其退出(或暂停)。

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

【问题讨论】:

    标签: java mouseevent awtrobot


    【解决方案1】:

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

    edward 链接到的另一个问题表明

    MouseInfo.getPointerInfo().getLocation()
    

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      这会给你一些灵感吗?


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

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

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

      更多讨论见Is it possible to have a MouseMotionListener listen to all system mouse motion events?

      【讨论】:

      • 除非我没有正确阅读您的代码,否则它只是模拟按键,而不是接受按键。据我所知,这些场景完全不相关。澄清一下:我不知道如何添加一个侦听器,而不是可以在执行 java 的任何内容之外进行侦听。我的目标是在我在其他地方(例如在不同的程序中)时使用监听器。
      • 我的回复是关于向组件添加侦听器以停止机器人。好的,所以问题的关键不在于添加监听器来停止机器人类,而在于如何响应 Java 应用程序之外的事件。帮不了你。
      • 由于我自己没有尝试它的经验,我的措辞很糟糕;感谢您的回复。
      • 更多讨论请参见:stackoverflow.com/questions/504559/…
      • 谢谢,这似乎与我正在寻找的内容密切相关。似乎人们一致认为这是不可能/不容易实现的。
      猜你喜欢
      • 1970-01-01
      • 2013-03-21
      • 2017-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-24
      • 2019-04-18
      • 1970-01-01
      相关资源
      最近更新 更多