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

查看:30
本文介绍了Java robots.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:我发现了一些可能与此问题相关的问题 此处此处,他们似乎和我有类似的问题(他们的机器人班没有将鼠标移动到他们想要的地方).

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 robots.mouseMove(x, y) 没有产生正确的结果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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