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.00.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.0Attempt 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.0Attempt 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