我正在模拟鼠标点击,我希望尽快完成。
目前我正在使用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秒。我以5毫秒的延迟时间缩短到6秒,但结果却非常不稳定。
我可以用另一种方式模拟点击吗?
提前致谢。
更新
我已将功能更新为:
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()等待,直到事件队列中当前所有事件都已处理完毕,但问题仍然存在。
答案 0 :(得分:0)
我假设您的应用程序正在非Java应用程序上运行。您可能会遇到设置延迟的问题。
如果在java应用程序本身中进行此操作以与其自身进行交互,则可以使用SwingUtilies并将每个机器人操作添加到AWT线程。这可能允许您的应用程序处理鼠标按下/释放事件。
我想我们需要更多信息。您的应用程序与之交互的是什么?如果它不是应用程序本身,那么你可能会因为增加延迟而陷入困境。我会让它工作,然后将延迟增加至少20%作为安全因素。我实际上看到了什么是一致的,延迟了一倍。
根据您的操作,您可以尝试将目标应用程序的优先级设置为实时,将Java应用程序设置为任务管理器中的最低优先级。它可能会有所帮助,但它并没有解决问题。