Java Robot模拟在随机点上点击但没有正确移动

时间:2018-03-26 19:31:30

标签: java

我试图将光标移动到随机生成的点。计算该点,然后将其添加到作为参数的坐标中。我只希望光标向下和向右移动,我通过将随机数的abs值添加到x和y来实现。然后光标应该移动到这个新位置并单击。我的问题是光标没有完全转到这个新位置并单击,但有时会转到不需要的位置,然后执行单击。是我的随机一代了吗?或者还有另一个原因,为什么光标移动到不应该的位置?

public static void randClick(int xCoord, int yCoord) {
    Random rand = new Random();
    int randX = -100;
    int randY = -100;
    int max = 10;
    int min = -10;
    int dev = 3;

    while (!(randX <= max && randX >= min)) {

        randX = (int) Math.round(rand.nextGaussian() * dev);
    }
    while (!(randY <= max && randY >= min)) {

        randY = (int) Math.round(rand.nextGaussian() * dev);
    }



    System.out.println("randX: " + randX + "randY: " + randY);
    System.out.println("xCoord + Math.abs(randX): " + (xCoord + Math.abs(randX))
        + " yCoord + Math.abs(randY): " + (yCoord + Math.abs(randY)));

    try {
        Robot robot = new Robot();
        robot.mouseMove((xCoord + Math.abs(randX)), (yCoord + Math.abs(randY)));

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


    } catch (Exception e) {
        e.printStackTrace();
    }
}

1 个答案:

答案 0 :(得分:0)

我最近发现了一个与我制作的机器人类似的问题,它本来应该简单地执行点和放大器。点击动作。我会给它一个X和Y值来移动,并且每次都会通过不同的量在X和Y轴上关闭。我不确定是什么导致这种情况(可能是课堂上的一个错误?),但我确实找到了解决问题的方法。

我的解决方案是使用相同的坐标连续多次调用robot.mouseMove(X, Y)方法。为了测试这一点,我在mouseMove()方法之间进行了大量延迟,并在屏幕上观察了指针。它实际上在所需位置周围来回反弹,不可避免地陷入我想要的实际坐标。我知道这不是最漂亮的解决方案,但它解决了我的问题。

因此,在您的情况下,您可以在try块中执行此操作:

Robot robot = new Robot();
int newXCoord = xCoord + Math.abs(randX);
int newYCoord = yCoord + Math.abs(randY);
robot.mouseMove(newXCoord, newYCoord);
robot.mouseMove(newXCoord, newYCoord);
robot.mouseMove(newXCoord, newYCoord);
robot.mouseMove(newXCoord, newYCoord);
robot.mousePress(InputEvent.BUTTON1_MASK);
robot.mouseRelease(InputEvent.BUTTON1_MASK);

你可能不需要四次打电话,但我发现这是一个神奇的数字&#34;从未失败过。