【发布时间】:2015-11-01 18:59:07
【问题描述】:
我正在模拟鼠标点击,我想尽可能快地做到这一点。
目前我正在使用 Robot 类:
private static int milliSecondClickDelay = 25;
public static void leftClickMouse(){
Main.robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
Main.robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
Main.robot.delay(milliSecondClickDelay);
Main.robot.mouseMove(0, 0);
}
不幸的是,我必须使用延迟,否则我会遇到一个竞争条件,即鼠标在释放注册之前移动。
25 是我可以使用而不会遇到此问题的最低延迟,但我正在执行的任务需要 14 秒。我已经缩短到 6 秒,延迟了 5 毫秒,但结果非常不一致。
我可以通过其他方式模拟点击吗?
提前致谢。
更新:
我已将函数更新为:
public static synchronized void leftClickMouse(){
Main.robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
Main.robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
Main.robot.waitForIdle();
Main.robot.mouseMove(0, 0);
}
Robot.waitForIdle() 会一直等待,直到当前事件队列中的所有事件都已处理完毕,但问题仍然存在。
【问题讨论】:
-
我想您可以使用本机代码在操作系统的系统消息队列中对鼠标单击消息进行排队。我对如何在我自己的操作系统 Windows 中执行此操作一无所知,更不用说其他所有操作系统了。
标签: java mouse race-condition awtrobot