什么时候java.awt.Robot无法点击?

时间:2015-07-07 04:15:44

标签: java awt

我使用 java.awt.Robot 在我的电脑上执行一些鼠标行为。代码很简单,如下所示:

import java.awt.Robot;
import java.awt.event.InputEvent;

public class RobotProxy {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        RobotProxy robotProxy = new RobotProxy();
        try {
            robotProxy.foo();
        } catch (Exception e) {
            // TODO: handle exception
            System.out.println("Exception there...");
        }
    }

    public void foo() throws Exception{
        Thread.sleep(3000);
        Robot robot = new Robot();
        robot.mouseMove(501, 296);

        leftClick(robot);

        robot.mouseMove(505, 296);

        leftClick(robot);

        robot.mouseMove(509, 296);

        leftClick(robot);
    }

    public void leftClick(Robot robot) throws Exception{
        Thread.sleep(1000);

        System.out.println("before Click...");

        robot.mousePress(InputEvent.BUTTON1_MASK);
        robot.mouseRelease(InputEvent.BUTTON1_MASK);

        System.out.println("after Click...");
    }

}

您可以发现我使用java.awt.Robot.mousePress(InputEvent.Button1_MASK)java.awt.Robot.mouseRelease(InputEvent.Button1_MASK)的组合来执行鼠标左键单击行为。

它在大多数时候都能正常工作但有时会失败。例如,某种软件复选框的左键单击行为将失败。我可以确保将click命令发送到 java.awt.Robot ,但没有任何反应。更令人难以置信的是, java.awt.Robot.mouseMove(int x,int y)仍然适用于那种情况。

PC的操作系统是Windows8.1

该软件不是市场上可用的,它只是由cpp编写的Windows本机应用程序。可以单击软件上的按钮,但不能单击复选框。

如果情况让你感到困惑,请告诉我java.awt.Robot何时无法点击。感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

问题在于robot.mousePressrobot.mouseRelease命令之间没有延迟。

以下是您可以在两者之间添加解决问题的示例 Thread.sleep(100);延迟100毫秒。大约可以听到的速度,单击单击