2016-05-21 8 views
0

Ich schrieb Code, der zuerst Mausposition zu Arraylist (mit dealys) hinzufügt und danach wird es von moveMouse (Roboter) wiederholt. Ich denke, dass mir alles gut geht. Aber es funktioniert nicht. Kann mir jemand helfen? Vielen Dank!Java-Roboter funktioniert nicht

Code: 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++; 
    } 
} 
} 

Main.

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

Bitte beschreiben Sie, was vs was passiert mit einem [MCVE] passieren sollte. Danke –

+0

Tipp: 'CoursorMove bang = new CoursorMove();' macht einen brandneuen 'bang' in jeder for-Schleife und verwirft ihn am Ende der Schleife. Ist es das was du willst? –

Antwort

3

Hier sind ein paar Modifikationen, die helfen sollten.

Zuerst brauchen Sie keine separaten Variablen zu speichern, wie viele Koordinaten Sie

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

Zweitens haben, werden Sie nie auf den gleichen Koordinaten Liste hinzugefügt werden, weil Sie eine neue Instanz der Klasse verwenden. Sie müssen gar keinen erstellen, Sie können diese Methoden direkt in der aktuellen Instanz aufrufen.

public void play() { 

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

     // sleep thread 
    } 
} 

Dann gleiches Problem unten, Sie wollen wahrscheinlich nur einen Roboter, nicht eine für jede Schleife

public void moveCoursor() { 

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

WoW!Mann Du bist unglaublich! Warte ... Du und Hansa. Ich wechsle nur eins mit Methoden abspielen. Ich habe object.getCoordinate. Und nachdem ich gerade getCoordinate bekommen habe. Ich lösche das Objekt aus dem Code. Und alles funktioniert fantastisch! Vielen Dank! Einen schönen Tag noch! – Brade

3

Haben überprüfen Sie, dass Sie in die Schleife

while (index < howmany) {} 

springen?


von dem, was ich hier sehe, ist, dass Sie sagen:

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

in Ihre Klasse direkt. Aber Sie aktualisieren nie "Howmany", nachdem Sie Elemente hinzugefügt haben. Als Ergebnis ist howmany = 0 bei der Initialisierung, weil coordinates.size() am Anfang 0 ist.

Ich denke, Sie müssen "Howmany" -Wert setzen, nachdem Sie Ihre Koordinaten hinzugefügt haben.

z.B.

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(); 
} 

EDIT: Zusätzlich müssen Sie jedes Mal ein neues Objekt CoursorMove stoppen zu schaffen. Ich aktualisierte die Spielmethode dafür

+0

Ja, das ist was ich sage. :) Deshalb habe ich 'howmany = coordinates.size();' zur play() -Methode. – Hansa

+0

Danke für deine Antwort. Ich habe den Code aktualisiert, aber das Problem ist nicht behoben. Irgendwelche vorschlagen? – Brade

+0

können Sie überprüfen, ob Sie die while-Schleife eingeben? Sie könnten es debuggen oder eine System.out.println in die Schleife einfügen – Hansa

Verwandte Themen