2016-05-21 92 views
0

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

代码: 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(); 
    } 
} 
+0

请描述发生VS应该用[MCVE]发生什么。谢谢 –

+0

提示:'CoursorMove bang = new CoursorMove();'在每个for循环中创建一个全新的'bang',并在循环结束时丢弃它。那是你要的吗? –

回答

3

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

首先,你并不需要存储多少坐标独立变量,你必须

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... 
+0

WoW!男人你真了不起!等等...你和Hansa。我只用方法打法改变了一个。我有object.getCoordinate。在我刚刚获得协调之后。我从代码中删除对象。所有的工作都非常棒!十分感谢!祝你今天愉快! – Brade

3

你确认你跳进

while (index < howmany) {} 

循环?


从我这里看到的是你把:

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

到类直接。但是,在添加项目之后,您绝不会更新“howmany”。 因此,在初始化时howmany = 0,因为coordinates.size()在开始时为0。

我想你必须在添加坐标后设置“howmany”的值。

例如

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对象。我更新了播放方法

+0

是的,那就是我说的。 :) 因此我加了'howmany = coordinates.size();'到play()方法。 – Hansa

+0

感谢您的回答。我更新了代码,但问题没有解决。任何建议? – Brade

+0

你可以验证你输入while循环吗?你可以调试它或添加一个System.out.println到循环 – Hansa