Java robot class mouseMove 不会到达指定位置

Java robot class mouseMove not going to specified location

老实说,我不完全确定哪里出了问题。这是 if 和 if else 下大量其他基本机器人命令动作的简短版本。

每当我运行程序鼠标应该移动到指定位置并点击。但是,当我 运行 程序时,它不会移动到我指定的位置,而是每次我 运行 它都会移动到不同的位置(我没有指定任何听众来更改位置,所以位置不应该改变)。我不知道这是我自己编写的代码还是我导入的代码?该程序一直 运行 正确,直到最近我在末尾添加了 else 以结束程序,我 运行 它没有 else 并且仍然遇到同样的问题。任何帮助将不胜感激。

package creator;
import java.awt.*;
import java.awt.event.*;
import java.io.IOException;
import javax.swing.*;

public class RobotDemo extends JFrame implements ActionListener
{
    private static final long serialVersionUID = 1L;


public static void main(String[] args) throws AWTException, IOException
{

             double value = (-0.66721);
        {
             if (value < -0.3)
             {                                          
                    Robot robotdelta = new Robot();
                    //Enters Chrome from java
                    robotdelta.delay(5000);                     
                    robotdelta.mouseMove(587, 1045);                       
                    robotdelta.delay(1000);
                    robotdelta.mousePress(InputEvent.BUTTON1_MASK);     
                    robotdelta.delay(1000);     
                    robotdelta.mouseRelease(InputEvent.BUTTON1_MASK);       
                    robotdelta.delay(1000);
                    //Enters online platfrom
                    robotdelta.mouseMove(770, 21);
                    robotdelta.delay(1000);
                    robotdelta.mousePress(InputEvent.BUTTON1_MASK);     
                    robotdelta.delay(1000);     
                    robotdelta.mouseRelease(InputEvent.BUTTON1_MASK);       
                    robotdelta.delay(1000);                                                                                                                 
                 }


             //secondary situation 
             else if (value > 0.3)
             {                                  
                    Robot robotdelta = new Robot();
                    //Enters Chrome from java
                    robotdelta.delay(1000);
                    robotdelta.mouseMove(587, 1045);
                    robotdelta.delay(100);
                    robotdelta.mousePress(InputEvent.BUTTON1_MASK);     
                    robotdelta.delay(100);      
                    robotdelta.mouseRelease(InputEvent.BUTTON1_MASK);       
                    robotdelta.delay(100);
                    //Enters online platfrom
                    robotdelta.mouseMove(770, 21);
                    robotdelta.delay(100);
                    robotdelta.mousePress(InputEvent.BUTTON1_MASK);     
                    robotdelta.delay(100);      
                    robotdelta.mouseRelease(InputEvent.BUTTON1_MASK);       
                    robotdelta.delay(1000);

             }
             else
             {
                system.exit(0);
             }

             }


 }    





public void actionPerformed(ActionEvent e) {


}       



}

免责声明,我玩这个 class 有一段时间了,我学到的最重要的事情是这是一个用于非常基本测试的工具,实际上没有大规模的关键操作应该永远依赖这个 class 完全按预期工作。

要回答您的问题,确实没有办法准确地 告诉mouseMove() 去哪里(至少在我使用它时不是)。然而,似乎非常接近的是多次调用 mouseMove() 到同一个地方(是的,这是非常 hacky 且不可取的)。例如,如果我想将鼠标移动到屏幕上的 (300,600),我发现如果你这样做:

mouseMove(300,600);
mouseMove(300,600);
mouseMove(300,600);
// ... can put more if you want

出于某种奇怪的原因,它比您只调用一次 mouseMove() 更接近您想去的地方。我不知道为什么会这样,但希望这会有所帮助。更不用说,在调用机器人执行不同操作之间放置足够的延迟并确保调用 waitForIdle() 也是一个好主意。