Frage von EGitarre, 35

Java Robot.MouseMove Problem?

Hallihallo, wie im Titel schon steht habe ich ein Problem mit dem Robotbefehl, der meine Maus bewegt. Ich bin auf dem Gebiet recht neu, durch die Schule habe ich zwar gelernt, wie man ne If Abfrage etc. schreibt, aber da unsere Lehrerin das selbst iwie nicht kann, weiß ich z.B. nix mit den Classes etc. anzufangen und ich glaube da liegt mein Problem und ich möchte selbst ein bisschen weiter arbeiten.

Ich möchte gerne ein Programm schreiben, in dass ich eine Zahl eintrage. Sobald ich dann auf meinen JButton drücke soll durch eine Switch Abfrage laufen, die dann Variablen Koordinaten für meinen Mauszeiger zuweist, je nachdem welche Zahl eingegeben wurde, welche dann vom Robot verarbeitet werden.

Die wichtigen Stellen von meinem Code: import java.awt.; import java.awt.event.; import javax.swing.; import javax.swing.event.; import java.awt.AWTException; import java.awt.Robot; import java.awt.event.MouseEvent;

public class Roboter extends JFrame { // Anfang Attribute int KoX; //KoX=KoordinateX int KoY; int VariableZahl; private JNumberField CoilEingabe = new JNumberField(); private JButton jButton1 = new JButton(); // Ende Attribute . . . . public static void main(String[] args) { Robot robot = null; robot = new Robot();

}

// Anfang Methoden   

public void jButton1_ActionPerformed(ActionEvent evt) { // TODO hier Quelltext einfügen VariableZahl = Eingabe.getInt(); switch (VariableZahl) { case 1 : KoX= 20; KoY=500;

    break;
  case 2 :  KoX= 40; KoY=700;
    
    break;
  default:   KoY=0; KoY=0;
} 
Robot.mouseMove(KoX, KoY);    

}
}

und derzeit bekomme ich deinen Error: Roboter.java:72:10: error: non-static method mouseMove(int,int) cannot be referenced from a static context Robot.mouseMove(KoX, KoY);

Weiß jemand Rat? Ist mein public static void main (String [] args) so richtig oder muss ich da grundlegend was dran ändern?

Danke schonmal für Tipps

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von KnusperPudding, Community-Experte für Java, 24

Hab mal deinen Code etwas entwuselt. Lesbar ist der in der Form nicht mehr. - Ich weiß dass die GuteFrage Codefunktion grauenhaft ist, aber für solche Probleme kann man dann z.B. per Pastebin.com Code für Fragen/Foren bereitstellen.

Des weiteren: Dein Code ist leider nicht mal kompilierbar, d.h. es sind einige grobe Syntaxfehler drin:

Die Imports stimmen nicht... 

Ein JNumberField ist mir nicht bekannt, stammt das aus einer Library?

Deine Mainmethode bildet lediglich eine Instanz der Robot-Klasse.

Die Methode jButton1_ActionPerformed wird nicht aufgerufen... Hat zudem noch Fehler: "Eingabe" ist was?

Robot.move setzt voraus, dass die Methode move statisch ist, was sie nicht ist.. 


Mir ist klar, dass du sagst du bist noch Anfänger, was auch kein Problem ist..  allerdings haben sich bereits Fehler eingeschlichen die ein paar mehr Grundlagen voraus setzen würden. - Ich bin ehrlich gesagt etwas überfragt wo ich hier anfangen soll mit erklären.

(Das ist nicht als niedermachen zu verstehen, ich versuch zu helfen, wenn es hakt, aber bitte etwas genauer, damit ich weiß wo ich ansetzen kann)

Kommentar von EGitarre ,

Hmm okay

JNumberField ist ein einfaches Zahlenfeld, Eingabe ist der Name davon. 

Okay, werde dann vllt nochmal nen neuen Versuch starten, habe da teilweise auch versucht durch ausprobieren was zu erreichen, weshalb da vllt im Grundlegendem was falsch ist :D  Ich war schonmal soweit, dass ich testweise die Koordinaten als Zahlen ausgeben konnte, allerdings hat der Robot versuch mich dann da etwas kaputt gemacht :D  Mein Ausbilder meinte ist soweit okay, nur die public static void main müsste anders, aber ich habe eh schon das gefühl gehabt, dass Programmieren bei ihm mehr schein als sein ist :'D 

Auf jeden Fall danke, dass du dir da Zeit für genommen hast +1

Werde mich dann erstmal mit dem auseinandersetzen was du gesagt hast und was statisch und nicht statisch ist :P

Kommentar von KnusperPudding ,

Nun gut. Ich hätte zudem noch einige Punkte anzumerken, die die Form betreffen: 

Variablen sollte man immer klein schreiben, das dient der Übersichtlichkeit im Code, um diese von Klassen zu unterscheiden.

Beispiele:

private int variableAnzahl;
private JTextField jTxtEingabe;

Die Deklaration von Instanz- und Klassenvariablen sollte man immer am Anfang einer Klasse machen, aber das hast du ja bereits.

die main-Methode ist die Methode, die ausgeführt wird, wenn du eine Klasse ausführen willst.

der Unterschied zwischen Statisch und nicht statisch ist: 

Statisches gibt es nur einmal. Nicht-Statisches Mehrfach, wodurch eine Instanzbildung notwendig ist.

Du siehst das nämlich direkt in deiner Klasse: Die Methode Main ist statisch, die Methode: jButton1_ActionPerformed nicht.

Kommentar von KnusperPudding ,

Danke für den Stern

Antwort
von EGitarre, 27

Oh wow, sehe grade, dass meine Quellcode darstellung iwie nicht richtig funktioniert hat.... hoffe man kann das trotzdem lesen....

Keine passende Antwort gefunden?

Fragen Sie die Community