Java robot.mouseMove(x,y)无法产生正确的结果

我最近一直在尝试使我制作的程序自动化,但是遇到了一个问题,robot.mouseMove(100,100)不会将鼠标发送到100,100。

我做了一个简单的程序来展示这一点:

new Robot().mouseMove(100, 100);

System.out.println(MouseInfo.getPointerInfo().getLocation().getX() + " , "

+ MouseInfo.getPointerInfo().getLocation().getY());

每次我运行此代码都会产生不同的结果:

54.0 , 54.0

0.0 , 0.0

58.0 , 58.0

当您将其循环放置时,鼠标会接近正确的位置。代码:

Robot b = new Robot();  

for (int i = 1; i < 10; i++) {

b.mouseMove(100, 100);

System.out.println("Attempt "+i+" : "+MouseInfo.getPointerInfo().getLocation().getX() + " , "

+ MouseInfo.getPointerInfo().getLocation().getY());

}

结果:

Attempt 1 : 12.0 , 21.0

Attempt 2 : 143.0 , 139.0

Attempt 3 : 79.0 , 81.0

Attempt 4 : 110.0 , 109.0

Attempt 5 : 96.0 , 96.0

Attempt 6 : 101.0 , 102.0

Attempt 7 : 100.0 , 99.0

Attempt 8 : 100.0 , 100.0

Attempt 9 : 100.0 , 100.0

Attempt 10 : 100.0 , 100.0

我不知道发生了什么,但任何帮助将不胜感激。谢谢。为了澄清我正在运行Windows 10和Java版本1.8.0_161。我的ThinkPad

E460屏幕为1920x1080,缩放比例为150%。更改比例不会影响该问题,但是,似乎将屏幕分辨率降低到最低可能(800x600)时,鼠标指针离所指示的位置更近了。这可能只是因为像素较少,错误空间较小。

在800x600屏幕上显示的结果:

Attempt 1 : 101.0 , 101.0

Attempt 2 : 99.0 , 100.0

Attempt 3 : 101.0 , 99.0

Attempt 4 : 100.0 , 101.0

Attempt 5 : 99.0 , 99.0

Attempt 6 : 101.0 , 101.0

Attempt 7 : 100.0 , 99.0

Attempt 8 : 99.0 , 101.0

Attempt 9 : 101.0 , 99.0

Attempt 10 : 99.0 , 101.0

编辑:不幸的是,每个循环创建一个新的机器人不是问题。我已经更新了代码(结果更加详尽)。

编辑2:刚刚将Java从1.8.0_151更新为1.8.0_161,相同的问题仍然存在。

回答:

在JDK的Bug网站说当前的解决方法是调用函数的循环,直到鼠标移动到右侧的空间。您可以使用如下功能:

public static void moveMouse(int x, int y, int maxTimes, Robot screenWin) {

for(int count = 0;(MouseInfo.getPointerInfo().getLocation().getX() != x ||

MouseInfo.getPointerInfo().getLocation().getY() != y) &&

count < maxTimes; count++) {

screenWin.mouseMove(x, y);

}

}

最大时间可以阻止无限循环,以防万一。通常4-5倍对我来说已经足够了。

以上是 Java robot.mouseMove(x,y)无法产生正确的结果 的全部内容, 来源链接: utcz.com/qa/402776.html

回到顶部