Java robot.mouseMove(x,y)没有产生正确的结果 [英] Java robot.mouseMove(x, y) not producing correct results

查看:2023
本文介绍了Java robot.mouseMove(x,y)没有产生正确的结果的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have recently been trying to automate a program I made and I have run into a problem, robot.mouseMove(100, 100) doesn't send the mouse to 100, 100.

我做了这个简单的程序来显示:

I made this simple program to show this off:

new Robot().mouseMove(100, 100);
System.out.println(MouseInfo.getPointerInfo().getLocation().getX() + " , "
        + MouseInfo.getPointerInfo().getLocation().getY());

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

This code produces different results every time I run it:

54.0 , 54.0
0.0 , 0.0
58.0 , 58.0

当你把它放在循环中时,鼠标接近正确的位置。
代码:

When you put this in a loop the mouse approaches the correct position. Code :

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)的鼠标指针更接近它所告知的位置。这可能只是因为像素更少,错误的空间更小。

I don't understand what's going on but any help would be appreciated. Thanks. And just to clarify I am running Windows 10 and Java version 1.8.0_161. My ThinkPad E460 screen is 1920x1080 with 150% scale. Changing the scale does not affect the problem, however, it appears that lowering my screen resolution to the lowest possible (800x600) the mouse pointer is put a lot closer to the spot it is told. This may just be because there are fewer pixels and less room for error.

800x600屏幕上的结果:

Results on 800x600 screen:

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

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

Unfortunately creating a new robot each loop isn't the problem. I have updated the code (and the results just to be thorough).

编辑2:刚刚将Java从1.8.0_151更新到1.8.0_161,同样的问题仍在继续。

EDIT 2: Just updated Java from 1.8.0_151 to 1.8.0_161, the same problem continues.

编辑3:我发现了一些可能与此问题有关的问题 here 这里,他们似乎有类似的问题(他们的机器人类没有将鼠标移动到他们想要的地方)。

EDIT 3: I found some questions which might be linked to this problem here and here, they seem to be having a similar problem to me (their robot class isn't moving the mouse to where they want it).

推荐答案

JDK Bug网站说当前的解决方法是
在循环中调用函数,直到鼠标移动到正确的空间。你可以使用这样的函数:

The JDK Bug website says a current workaround is to call the function in a loop until the mouse moved to the right space. You could use a function like this:

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次对我来说已经足够了。

Max times is there to stop an infinite loop in case something happens. Usually 4-5 times is good enough for me.

这篇关于Java robot.mouseMove(x,y)没有产生正确的结果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆