我最近一直在尝试自动化我编写的一个程序,但遇到了一个问题,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());
}
Results:
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,同样的问题仍然存在。
编辑3:我发现了一些可能与此问题相关的问题here and here,他们似乎也遇到了与我类似的问题(他们的机器人类没有将鼠标移动到他们想要的位置)。