Robot

Status
Nicht offen für weitere Antworten.

fix

Mitglied
Hi,

ich wollte mal fragen ob es sowas gibt wie:

Robot erz = new Robot();

if (erz.keyPress('VK_ENTER')) {
System.out.println("if geht");
}

Also ich will aus einer while schleife raus prüfen, ob die Taste Enter gedrückt wurde. Wenn ja, soll die while schleife abgebrochen werden.
 

Schandro

Top Contributor
Robot ist zum drücken der Taste da, nicht zum auslesen ob der Benutzer die Taste drückt..

Wenn du new GUI hast: Häng nen KeyListener an den Component dran, das den Focus hat. Oder benutz die Input/ActionMap
Ansonsten: Imho kann man mit Java keine "KeyEvents" bekommen, wenn der Benutzer nicht die GUI von einem benutzt, ich würd mich aber sehr gerne eines besseren belehren lassen...
 

Ebenius

Top Contributor
Beschreib mal ungefähr Dein Programm. Was soll es denn insgesamt tun? Und wozu benötigst Du in diesem Kontext die Tastaturabfrage? Dann kann man besser auf das Problem eingehen.

Ebenius
 

fix

Mitglied
also ich versuche erstmal eine klasse zu machen die nach meinen vorstellungen funktioniert. da ich die while schleife brauche das er ja alle 9,5 sekunden klickt, sie aber nicht allein aufhört, dachte ich mir, ich frage eine taste ab, und halte das ganze mit break; an.
ich will das ganze später über einen button laufen lassen.

Code:
import java.awt.*;
import java.awt.event.*;

public class eklick {

    public static void main(String[] args) throws AWTException {
                while (true)
                {
                try {
                Thread.sleep(9500);
                Robot erz = new Robot();
                erz.mouseMove(100,524);
                erz.mousePress(InputEvent.BUTTON1_MASK);
                erz.mouseRelease(InputEvent.BUTTON1_MASK);
                System.out.println("erz hacken");
                } catch (InterruptedException e) {
                // nix fangen sondern fortfahren
                }
               }
              }
             }

und endgültig soll es hier rein:

Code:
 public class erz implements ActionListener {
    public void actionPerformed(ActionEvent ev) {
     System.out.println("erz wurde angeklickt");
     }
    }

der button funktioniert auch soweit
 
Zuletzt bearbeitet:

Ebenius

Top Contributor
da ich die while schleife brauche das er ja alle 9,5 sekunden klickt, sie aber nicht allein aufhört, dachte ich mir, ich frage eine taste ab, und halte das ganze mit break; an.
Um einen Tastendruck mitzubekommen brauchst Du eine Komponente mit Fokus. Ansonsten bekommst Du nichts mit. Dieser Ansatz wird also nicht einfach so funktionieren. Im Allgemeinen wäre es doch ohnehin schöner, die über einen Button gestartete Aktion auch wieder über den Button stoppen zu können.

ich will das ganze später über einen button laufen lassen.
In dem Fall musst Du die Aktion in einem separaten Thread ausführen. So lange die Methode des ActionListener nicht zurückkehrt kann nämlich in der ganzen Anwendung auch nichts mehr gezeichnet und keine Eingaben mehr verarbeitet werden. Das sieht dann sehr hässlich aus. Und ein Stop-Button würde auch gar nicht mehr funktionieren können, weil der Thread der die Eingaben (Mausklick auf den Button) verarbeiten müsste mit Deiner Schleife beschäftigt ist.

Die Schleife würde ich -- wie Du auch schon angenommen hast -- um eine Abbruchbedingung erweitern:
Java:
while (!stopped) {
  // Hier der Inhalt Deiner Schleife, ohne Änderung
}
Die Schleife solltest Du in eine eigene Klasse auslagern. Die Klasse muss das Runnable-Interface implementieren, damit Instanzen der Klasse in einem separaten Thread ausgeführt werden können. Die Variable stopped sollte eine Member-Variable der Klasse sein. Eine stop()-Methode sollte die Variable auf true setzen und den ausführenden Thread unterbrechen, damit die Schleife zum Abbruch kommt. So in etwa:
Java:
public class Clicker implements Runnable {

  private boolean stopped;

  private Thread workerThread;

  @Override
  public void run() {
    workerThread = Thread.currentThread();
    while (!stopped) {
      // Hier der Inhalt Deiner Schleife, ohne Änderung
    }
  }

  /** Stop the clicking. */
  public void stop() {
    stopped = true;
    if (workerThread != null) {
      workerThread.interrupt();
    }
  }
}
Die actionPerformed-Methode der Klasse Erz (Variablennamen immer mit Großbuchstaben anfangen lassen (CamelCase); das macht man in Java so) soll nun einen Clicker erzeugen und in einem Thread starten. Wenn schon ein Clicker läuft soll sie den Clicker anhalten und keinen neuen erzeugen.
Java:
public class Erz implements ActionListener {

  private Clicker clicker;

  public void actionPerformed(ActionEvent ev) {
    if (clicker == null) {
      clicker = new Clicker();
      new Thread(clicker).start();
    } else {
      clicker.stop();
      clicker = null;
    }
  }
}
Da der Button-Text sich am besten ändern soll, würde ich die Klasse Erz dann lieber das Action-Interface implementieren lassen. Das ist eine Erweiterung der ActionListener und bietet gleich den Text, ein Icon, einen ToolTip (...) mit an:
Java:
public class Erz extends AbstractAction {

  private Clicker clicker;

  public Erz() {
    super("Start");
  }

  public void actionPerformed(ActionEvent ev) {
    if (clicker == null) {
      clicker = new Clicker();
      new Thread(clicker).start();
      putValue(NAME, "Stop");
    } else {
      clicker.stop();
      clicker = null;
      putValue(NAME, "Start");
    }
  }
}
Nun muss man dem Button keinen Text mehr geben, den holt er sich gleich von der Action. Actions setzt man nicht mit addActionListener(...), sondern so:
Java:
new JButton(new Erz());

// beziehungsweise ...
button.setAction(new Erz());
Ich hoffe, das war verständlich erklärt und hilft Dir weiter. Falls ich ein paar kleine Fehler im Quelltext habe: Der Quelltext ist im Browser getippt. Am besten selber korrigieren oder nachfragen.

Ebenius
 

fix

Mitglied
Erstmal vielen Dank für diese ausführliche Beschreibung.
Die Idee mit den Button finde ich persönlich sehr gut. Ich wusste zwar das man das alles umbrnennen kann aber dieses dann auch noch am selben Button zu stoppen ist mir nicht in den Kopf gekommen.

Ok, nun habe ich das alles fein eingefügt, meinen Code um einige Zeilen leichter gemacht, dank den oben erwähnten Beispielen und wollte ihn Compilieren. Als Fehlermeldung kam nun das er throws AWTException für new Robot braucht.
Ich habe mir auch einige Beispiele angesehen, konnte aber mit diesen leider nix anfangen.

Ich habe versucht Robot nun in eine neue Klasse zu machen, brachte leider keinen Erfolg. Ich habe auch versucht in x Möglichkeiten throws AWTException vor und hinter run einzufügen, braucht leider auch keinen Erfolg.
 

Schandro

Top Contributor
Bitte Kapitel zu Exceptionbehandlung durchlesen ;) €: Ist immer besser als nur Beispiele durchzulesen.
Java:
try{
// code...
catch(AWTException e){
e.printStackTrace();}
 
Zuletzt bearbeitet:

fix

Mitglied
Muss ich eine neue Methode erstellen und die alte dann überschreiben? Wie z.B.

Code:
class MyException 
extends Exception
{
  public MyException()
  {
		
  }
  public MyException(String s)
  {
    super(s);	
  }
}

public class MyClass
{
  public static void main(String[] args)
  {  	
    try
    {
      throw new MyException("Fehler aufgetreten...");
    }
    catch(MyException e)
    {			
      System.out.print(e.getMessage());	
    }		
  }
}
 
Zuletzt bearbeitet:

fix

Mitglied
Irgendwie versteh ich es nicht, kann mir bitte noch jemand einen Tip geben? Ich habe es nun so in verschiedenen Ausführungen versucht, mit try, catch und finally, nur mit try und catch, aber ich bekomme es nicht hin.

Mein Aktueller stand:

Code:
 public class Clicker implements Runnable {

  private boolean stopped;

  private Thread workerThread;

  @Override
  public void run() {
     workerThread = Thread.currentThread();
       while (!stopped) {
       Robot erz = null; 
       try {
                erz = new Robot();
                catch (AWTException e) {  
                e.printStackTrace();  
                }    
    erz.mouseMove(100,524);
    erz.mousePress(InputEvent.BUTTON1_MASK);
    erz.mouseRelease(InputEvent.BUTTON1_MASK);
    erz.delay(9500);
    System.out.println("erz hacken");
     }
    }
 

fix

Mitglied
Boah wenn ich könnte, würde ich dich umarmen :p Vielen Dank an euch beiden.
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Robot funktioniert nicht bei SelectionListener Java Basics - Anfänger-Themen 6
M Moorhuhn Pixel-Aimbot mit Robot Library Java Basics - Anfänger-Themen 12
B Robot auf virtuellem Desktop laufen lassen? Java Basics - Anfänger-Themen 4
X Wie erreiche ich, dass ein Robot weitere Attribute hat, die nicht materialisiert sind, sondern nur über get/ set-Methoden simuliert sind? Java Basics - Anfänger-Themen 1
T Tastatur mit robot ß ^ und @ simulieren Java Basics - Anfänger-Themen 4
S Java robot Tastenschläge vereinfachen Java Basics - Anfänger-Themen 4
S Java Robot Tasteneingaben vereinfachen Java Basics - Anfänger-Themen 1
X Robot beenden oder zerstören Java Basics - Anfänger-Themen 7
B Threads Robot.mouseMove ruckelt Java Basics - Anfänger-Themen 1
V Robot kann Button nicht drücken warum? Java Basics - Anfänger-Themen 6
K Wie funktioniert die Klasse Robot Java Basics - Anfänger-Themen 19
J Robot Java Basics - Anfänger-Themen 4
Viktormk robot class Java Basics - Anfänger-Themen 11
Viktormk java robot class Java Basics - Anfänger-Themen 5
Viktormk java robot Java Basics - Anfänger-Themen 28
D Loop Funktion für Robot Klasse Java Basics - Anfänger-Themen 5
P Screenshot eines Fullscreen-Fensters mit Robot Java Basics - Anfänger-Themen 3
TheKing Robot in .App (mac) Java Basics - Anfänger-Themen 6
TheKing Klasse Robot-KeyPress Java Basics - Anfänger-Themen 2
X Robot geht nicht mehr (Ubuntu 9.10) Java Basics - Anfänger-Themen 2
B Robot.keyPress() Java Basics - Anfänger-Themen 2
F Variabler - Robot - Tastatureingaben Java Basics - Anfänger-Themen 5
Screen robot key frage Java Basics - Anfänger-Themen 16
D Frage zur Klasse Robot Java Basics - Anfänger-Themen 2
G java robot Java Basics - Anfänger-Themen 6
N Robot/GetpixelColor Problem Java Basics - Anfänger-Themen 2
G Array schreiben durch Robot Java Basics - Anfänger-Themen 8
C java.awt.Robot; Java Basics - Anfänger-Themen 16
W Windows clipboard zugriff / Robot tricks ? Java Basics - Anfänger-Themen 2
S Robot ohne Focus. Java Basics - Anfänger-Themen 6
T Robot-Problem mit Sonderzeichen Java Basics - Anfänger-Themen 2
M Verwendung von Robot... wie? Java Basics - Anfänger-Themen 6
B java.awt.Robot Problem. Java Basics - Anfänger-Themen 11

Ähnliche Java Themen

Neue Themen


Oben