【问题标题】:How can I kill a rogue robot?如何杀死流氓机器人?
【发布时间】:2014-08-06 02:01:44
【问题描述】:

我正在 (ab) 使用 Java 的 Robot 类在浏览器窗口中自动执行一些点击任务。第一次单击时,Java 应用程序失去焦点。如果机器人开始行为不端,我想终止程序。但是,我不能轻易做到这一点,因为机器人可以控制我的鼠标。

我想做的是让我的程序监听来自我的某种信号,告诉它退出。例如,当按下“退出”键时,程序可能会退出。但是,当应用程序不在焦点时,我不知道如何监听击键。

我在 OSX 10.9 中运行 Java SE 6。

在这些情况下,我如何能够终止我的程序?

编辑:发布后,我发现了一个解决相同问题的相关问题:Listening for input without focus in Java。 (但是,这不是完全重复的,因为我的问题有点广泛。)

【问题讨论】:

  • “在浏览器窗口中自动执行一些点击任务”您尝试使用Selenium 吗?
  • 我不认为你能做到......我的意思是听键盘寻找特定的组合键,而这对于普通的 java 是不可能的。您可以使用 JNI/JNA 并编写您的本机层来处理此组合键
  • @Nizil 浏览器只是一个例子;机器人可能正在与任何应用程序交互。我感兴趣的问题是如何打断机器人正在做的事情。
  • @augurar 好吧,如果你的机器人必须能够与任何应用程序交互,那么 Selenium 不是一个好主意 :P 祝你好运:)

标签: java awtrobot


【解决方案1】:

一种选择是在每次调用Robot 之前(或定期)检查鼠标位置,以验证它是否仍处于上次mouseMove 到达的位置。如果它检测到差异,它会抛出异常。那样的话,手动移动鼠标就可以用来终止事情了。

最好包装Robot 以确保它始终检查。我建议SecondLawObeyingRobot

【讨论】:

  • 非常聪明!在关键时刻(例如机器人按下鼠标按钮时)移动鼠标可能会导致一些问题,但我认为这对我的目的有用。
  • 如果在mouseRelease 之前发现差异,则插入escape 按键应该可以避免大多数此类问题。至少在 Windows 上(不确定 OSX),escape 取消拖动。
猜你喜欢
  • 2018-04-15
  • 1970-01-01
  • 2016-12-20
  • 1970-01-01
  • 2014-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多