Java机器人不起作用

时间:2016-05-21 16:56:43

标签: java testing awtrobot

我正在编写代码,首先将鼠标位置添加到arraylist(使用dealys),之后,它将由moveMouse(机器人)重复。我认为我做得很好。但它不起作用。谁能帮我?谢谢!

代码: CoursorMove

public class CoursorMove {

private ArrayList<Point> coordinates = new ArrayList<>();

public void addNewObjectWithCoordinates() {
    coordinates.add(MouseInfo.getPointerInfo().getLocation());
}

public Point getCoordinate(int index) {
    return coordinates.get(index);

}

public void play() {

    for (int i = 0; i < 5; i++) {
        CoursorMove bang = new CoursorMove();
        bang.addNewObjectWithCoordinates();
        System.out.println(bang.getCoordinate(0).getX());

        try {
            Thread.sleep(1500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

int howmany = coordinates.size();
int index = 0;

public int getHowmany() {
    return howmany;
}

public void setHowmany(int howmany) {
    this.howmany = howmany;
}

public void moveCoursor() {

    while (index < howmany) {
        try {
            Robot robot = new Robot();
            robot.mouseMove(coordinates.get(index).x, coordinates.get(index).y);
            robot.delay(1500);
        } catch (AWTException e) {
            System.err.println("Error CM 68L"); // error CoursorMove class
                                                // Line 68
            e.printStackTrace();
        }
        index++;
    }
}
 }

public class Main {
public static void main(String[] args) {
    CoursorMove triup = new CoursorMove();
    triup.play();
    triup.moveCoursor();
    }
}

2 个答案:

答案 0 :(得分:2)

您是否确认跳转到

while (index < howmany) {}

循环?

从我在这里看到的是你放的:

int howmany = coordinates.size();
int index = 0;

直接进入你的班级。但你永远不会更新&#34; howmany&#34;在您添加项目后。 结果是在初始化时howmany = 0,因为coordinates.size()在开始时为0。

我想你必须在添加坐标后设置&#34; howmany&#34;的值。

e.g。

public void play() {

  for (int i = 0; i < 5; i++) {
    addNewObjectWithCoordinates();
    System.out.println(getCoordinate(0).getX());

    try {
        Thread.sleep(1500);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
  }
  howmany = coordinates.size();
}

编辑: 此外,您必须每次都停止创建新的CoursorMove对象。我更新了

的播放方法

答案 1 :(得分:2)

以下是一些应该有所帮助的修改。

首先,您不需要为您拥有的坐标存储单独的变量

public int getHowmany() {
    return coordinates.size();
}

其次,您永远不会添加到相同的坐标列表,因为您使用了类的新实例。您根本不需要制作一个,您可以直接在当前实例上调用这些方法。

public void play() {

    for (int i = 0; i < 5; i++) {
        addNewObjectWithCoordinates();
        System.out.println(getCoordinate(0).getX());

        // sleep thread 
    }
}

下面同样的问题,你可能只需要一个机器人,而不是每个循环一个机器人

public void moveCoursor() {

    Robot robot = new Robot();
    while (index < getHowmany()) {
        try {
            robot.mouseMove...