Andere Methoden in anderen Klassen aufrufen

matze86

Bekanntes Mitglied
Hallo, ich habe glaube gerade einen Denkfehler drin, wenn ich folgenden Code ausführen möchte, meckert der Compiler wenn er nach den Mausklick eine Methode anderer Klasse im selben Packet aufrufen soll.

Was ist an den Code falsch?

Java:
public class MausMalenFX extends Application{
    private Label lab;
    
    @Override
    public void start(Stage meinStage) throws Exception {
        FlowPane root = new FlowPane();
        lab = new Label("Hello");
        root.getChildren().add(lab);
        Canvas meinCanvas = new Canvas(400, 400);
        root.getChildren().add(meinCanvas);
        Scene meineScene = new Scene(root, 400, 400);
        Maus maus = new Maus();
        meinCanvas.setOnMouseClicked(maus);
        meinStage.setScene(meineScene);
        meinStage.setTitle("mein Titel");
        meinStage.show();
        
    }
    
    public void labelsetzen(String x) {
        lab.setText(x);
    }
    
    

    
    public static void main(String[] args) {
        launch(args);
    }
}

class Maus implements EventHandler<MouseEvent>{
    private MausMalenFX neu;
    
    @Override
    public void handle(MouseEvent e) {
        neu.labelsetzen("ändern");
        
    }
}
 

KonradN

Super-Moderator
Mitarbeiter
meckert der Compiler
Was genau meckert der Compiler an welcher Stelle?

Im Augenblick würde ich vermuten, dass du zur Laufzeit eine NullPointerException bekommst in Zeile 37 weil Du neu nie setzt. Das könntest Du lösen, indem Du in Maus einen Konstruktor hinzufügst, der eine MausMalenFX Instanz als Parameter nimmt um dann die Instanzvariable neu zu setzen. Und die Instanz erzeugst Du dann mit new Maus(this);

Aber ich würde die Klasse Maus überhaupt nicht nutzen und statt dessen eine Mehode public void wasAuchImmer(MouseEvent e) in MausMalenFX zu haben um dann diese Methode ans EventHandler anzugeben (Methodenreferenz this::wasAuchImmer). Das wasAuchImmer sollte natürlich ausdrücken, was die Methode macht. Also z.b. "setzeLabelAufAendern".
 

matze86

Bekanntes Mitglied
Ja genau, der meckerte bei Zeile 37 mit NullPointerException.

So habe jetzt die Referenz von MausMalenFX im Parameter übergeben, in Maus einen Konstruktor angelegt, der die neue Instanz MausMalenFX mit der Referenz erzeugt, jetzt funktioniert es.

Aber warum Funktioniert das nur mit der Referenz?


Bisher habe ich nur gelernt, die Eventhandler in eigen Klassen zu setzen. Meist innere Klassen.
 

matze86

Bekanntes Mitglied
Aber ich würde die Klasse Maus überhaupt nicht nutzen und statt dessen eine Mehode public void wasAuchImmer(MouseEvent e) in MausMalenFX zu haben um dann diese Methode ans EventHandler anzugeben (Methodenreferenz this::wasAuchImmer). Das wasAuchImmer sollte natürlich ausdrücken, was die Methode macht. Also z.b. "setzeLabelAufAendern".
Wie genau soll so etwas aussehen?
 

Jw456

Top Contributor
MausMalenFX ist die Klasse der Bauplan nicht das Objekt.
Du kannst nicht in den Bauplan hinein gehen aber in das fertige Haus schon.
 

KonradN

Super-Moderator
Mitarbeiter
Alles jetzt direkt im Forum geschrieben - Tippfehler und so bitte daher eigenständig ausbessern:
Wie genau soll so etwas aussehen?
Also die erste Variante, die ich angesprochen habe mit Konstruktor und Übergabe der Instanz:
[CODE lang="java" highlight="12,35-37"]public class MausMalenFX extends Application{
private Label lab;

@Override
public void start(Stage meinStage) throws Exception {
FlowPane root = new FlowPane();
lab = new Label("Hello");
root.getChildren().add(lab);
Canvas meinCanvas = new Canvas(400, 400);
root.getChildren().add(meinCanvas);
Scene meineScene = new Scene(root, 400, 400);
Maus maus = new Maus(this);
meinCanvas.setOnMouseClicked(maus);
meinStage.setScene(meineScene);
meinStage.setTitle("mein Titel");
meinStage.show();

}

public void labelsetzen(String x) {
lab.setText(x);
}




public static void main(String[] args) {
launch(args);
}
}

class Maus implements EventHandler<MouseEvent>{
private MausMalenFX neu;

public Maus(MausMalenFX neu) {
this.neu = neu;
}

@Override
public void handle(MouseEvent e) {
neu.labelsetzen("ändern");

}
}[/CODE]

Die Variante mit der Methodenreferenz (Zu der ich immer raten würde! Oder alternative mit Lambda Expression):
[CODE lang="java" title="Lambda Expression"]public class MausMalenFX extends Application{
private Label lab;

@Override
public void start(Stage meinStage) throws Exception {
FlowPane root = new FlowPane();
lab = new Label("Hello");
root.getChildren().add(lab);
Canvas meinCanvas = new Canvas(400, 400);
root.getChildren().add(meinCanvas);
Scene meineScene = new Scene(root, 400, 400);
meinCanvas.setOnMouseClicked(e -> labelsetzen("ändern"));
meinStage.setScene(meineScene);
meinStage.setTitle("mein Titel");
meinStage.show();
}

public void labelsetzen(String x) {
lab.setText(x);
}

public static void main(String[] args) {
launch(args);
}
}[/CODE]

[CODE lang="java" title="Methoden Referenz"]public class MausMalenFX extends Application{
private Label lab;

@Override
public void start(Stage meinStage) throws Exception {
FlowPane root = new FlowPane();
lab = new Label("Hello");
root.getChildren().add(lab);
Canvas meinCanvas = new Canvas(400, 400);
root.getChildren().add(meinCanvas);
Scene meineScene = new Scene(root, 400, 400);
meinCanvas.setOnMouseClicked(this::setLabelToAendern);
meinStage.setScene(meineScene);
meinStage.setTitle("mein Titel");
meinStage.show();
}

public void labelsetzen(String x) {
lab.setText(x);
}

public void setLabelToAendern(MouseEvent e) {
labelsetzen("aendern");
}

public static void main(String[] args) {
launch(args);
}
}[/CODE]

Lambda Ausdruck ist halt sehr gut, wenn man nur einen einzigen Aufruf hat und die Parameter der Methode nicht dem entsprechen, was man braucht. Hier wird MouseEvent ja nicht benutzt...

Aber LambdaAudrücke sollten nicht ganze Blöcke sein. Das geht thoretisch zwar auch, aber das ist unleserlich. Da ist dann eine eigenständige Methode besser. So wie im letzten Beispiel die Methode setlabelToAendern. Die Methode kann genau so heissen, dass klar ist, was sie macht. Und dann sieht man z.B. auch direkt an einer Zeile, was passiert:
meinCanvas.setOnMouseClicked(this::setLabelToAendern);
Da steht ja gut lesbar: Wenn Du auf meinCanvas clickst, dann wird das Label auf aendern gesetzt.
 

matze86

Bekanntes Mitglied
Danke schön erklärt, das hatte ich so in der Form noch nicht gehabt.
Aber ich habe schon viel über Lambda gehört im Bezug auf Java. Ist das ziemlich neu?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
berserkerdq2 Zwei Klassen Erben von der Klasse A, die eine Klasse kann ich an Methoden übergeben, die als Parameter A haben, die andere nicht? Java Basics - Anfänger-Themen 3
M Aufsplitten von Methoden in andere Klassen Java Basics - Anfänger-Themen 2
J Übergabe von Parametern an andere Methoden Java Basics - Anfänger-Themen 5
R Weitergabe von Arrays aus Methoden in andere Klasse Java Basics - Anfänger-Themen 5
J Klassen Variablen in andere Klassen oder Methoden übernehmen Java Basics - Anfänger-Themen 1
Z Zugriff auf andere Methoden Java Basics - Anfänger-Themen 12
I Objekte an andere Klassen/Methoden übergeben? Java Basics - Anfänger-Themen 5
J Arrays, Variablen an andere Methoden weitergeben Java Basics - Anfänger-Themen 3
S auslagern von Methoden in andere Klasse Java Basics - Anfänger-Themen 4
G Übertragen von Variablen auf andere klassen oder Methoden Java Basics - Anfänger-Themen 2
T Methoden für GUI in eine andere Klasse Java Basics - Anfänger-Themen 2
A Andere Methoden aus einem Thread starten Java Basics - Anfänger-Themen 8
T können überschriebene methoden andere zugruffsrechte besitze Java Basics - Anfänger-Themen 2
G Array in andere Methoden übernehmen Java Basics - Anfänger-Themen 6
M Vergleichen, ob eine Liste länger als andere ist Java Basics - Anfänger-Themen 6
S 2 Reihen ratio-btn, eine Reihe funktioniert andere nicht Java Basics - Anfänger-Themen 4
javalux123 Keylistener auf andere Fenster Java Basics - Anfänger-Themen 3
C Int an andere Klasse übergeben Java Basics - Anfänger-Themen 26
Avalon Warum funktioniert eine Bedingung und eine andere nicht? Java Basics - Anfänger-Themen 2
K In andere Zahlensysteme umwandeln, wann klappt immer der Trick mit log? Java Basics - Anfänger-Themen 6
M Wie kann eine Methode (string) eine andere Methode (void) mit zufälligen int-Werten aufrufen? Java Basics - Anfänger-Themen 4
M Wie kann eine Methode eine andere Methode um Werte wie z.B. 1 erhöhen? Java Basics - Anfänger-Themen 6
C In String, Buchstaben ersetzen durch andere Buchstaben Java Basics - Anfänger-Themen 26
E Warum lässt sich eine Klasse nicht starten, wenn eine andere Klasse in dem Modul fehlerhaft ist? Java Basics - Anfänger-Themen 1
S Objekt aus Arraylist in andere Arraylist kopieren? Java Basics - Anfänger-Themen 2
jonny_2k12 Wie kann ich eine ArrayList aus einer Klasse in eine andere übergeben? Java Basics - Anfänger-Themen 21
M Integer aus aus einer Klasse in andere speichern Java Basics - Anfänger-Themen 12
A Selbe Aufgaben stellung, andere Lösung Java Basics - Anfänger-Themen 7
S ArrayList in andere Klasse übernhemen Java Basics - Anfänger-Themen 5
Y Java andere Klasse aufrufen Java Basics - Anfänger-Themen 6
J Combobox füllen mit Wertausgabe von andere Klasse Java Basics - Anfänger-Themen 3
E Methode soll andere Methode der selben Klasse aufrufen Java Basics - Anfänger-Themen 28
B Mit webservice a) String auf Webseite ausgeben b) Weiterleitung auf andere Seite Java Basics - Anfänger-Themen 10
scratchy1 Kann man in einer Methode eine andere aufrufen? Java Basics - Anfänger-Themen 2
G JTextField per Button speichern und an andere Klasse übergeben Java Basics - Anfänger-Themen 2
M JTable an andere Klasse übergeben Java Basics - Anfänger-Themen 2
neerual Klassen Wie rufe ich Klassen, die andere Klassen extenden in einer Test Unit auf? Java Basics - Anfänger-Themen 10
E Variable (Vektor) in andere Methode übergeben Java Basics - Anfänger-Themen 4
F Input/Output die eine txt-Datei funktioniert die andere nicht Java Basics - Anfänger-Themen 8
W Klassen greifen auf andere Klassen zu Java Basics - Anfänger-Themen 1
L Klassen Objekt aus einer Warteschlange in eine andere übergeben, geht nicht? Java Basics - Anfänger-Themen 6
A Variablen Main Klasse soll auf eine andere Klasse zugreifen Java Basics - Anfänger-Themen 3
F OOP Instanz einer Klasse an eine andere weitergeben Java Basics - Anfänger-Themen 16
S verweis auf andere Klasse fehler Java Basics - Anfänger-Themen 3
D Klassen Wert aus JTextfield in JLabel (andere Klasse) darstellen. Java Basics - Anfänger-Themen 60
JavaNewbie2.0 Strings in andere Klassen importieren. Java Basics - Anfänger-Themen 2
M Methoden Int einer Methode an eine andere Methode übergeben Java Basics - Anfänger-Themen 4
J Best Practice Auf DefaultTableModel in andere Klasse zugreifen Java Basics - Anfänger-Themen 4
J Werte an eine andere Klasse übergeben Java Basics - Anfänger-Themen 4
I Zähler, der erst wieder zählt nachdem Pixel wieder andere Farbe hat Java Basics - Anfänger-Themen 2
M Variablen Eine etwas andere if Abfrage ! Java Basics - Anfänger-Themen 10
P Variablen Wie kann ich eine lokale Variable in eine andere Methode einfügen? Java Basics - Anfänger-Themen 27
P auf eine andere Klasse zugreifen Java Basics - Anfänger-Themen 12
F Ja Nein Abfrage und andere Probleme Java Basics - Anfänger-Themen 5
A Nach Druck eines Buttons reagieren andere Button nicht Java Basics - Anfänger-Themen 3
TheMenox Methoden Bestimmung an welche Methode eine andere Methode ihren Wert weitergeben soll Java Basics - Anfänger-Themen 35
P Variablen einer Methode in andere Method übergeben Java Basics - Anfänger-Themen 6
V Andere Schreibweise für % Modulo Java Basics - Anfänger-Themen 9
L Variable an andere Klasse weitergeben - Was mache ich falsch? Java Basics - Anfänger-Themen 2
O Übergabe in eine andere Klasse Java Basics - Anfänger-Themen 3
T Integer Wert in andere Methode übergeben Java Basics - Anfänger-Themen 2
F double[] an andere Methode übergeben Java Basics - Anfänger-Themen 1
N Variablen ändern wenn eine andere geändert wird Java Basics - Anfänger-Themen 7
J 2 dimensionales Array an andere Methode übergeben? Java Basics - Anfänger-Themen 1
T Kommandozeilenparameter in andere Methode Java Basics - Anfänger-Themen 17
D Bestimmte Werte von Objekten aus einer ArrayList in eine andere ArrayList kopieren Java Basics - Anfänger-Themen 14
W Wert an andere Klasse übergeben Java Basics - Anfänger-Themen 8
I Java Eingabe aus einer anderen Klasse in eine andere an Konstruktor übergeben Java Basics - Anfänger-Themen 4
T Array in andere Klasse verwenden Java Basics - Anfänger-Themen 3
W Klassen Auf andere Klassenobjekte zugreifen Java Basics - Anfänger-Themen 20
W Variable an andere Klasse übergeben Java Basics - Anfänger-Themen 3
J JComboBox in andere Klasse Java Basics - Anfänger-Themen 2
E OOP Methode an andere Methode übergeben / OOP Anfänger Java Basics - Anfänger-Themen 4
K Erste Schritte Classe in andere Einfügen?? Java Basics - Anfänger-Themen 12
U Inhalt von JTextfield an andere Klasse weitergeben Java Basics - Anfänger-Themen 13
O Java Interfaces für andere Programmiersprachen zur Verfuegung stellen? Java Basics - Anfänger-Themen 2
S Aus einer Klasse eine andere laden Java Basics - Anfänger-Themen 6
L Variable andere Variable und z.B. Preis zuordnen Java Basics - Anfänger-Themen 7
M Variablen übergeben an andere Klasse Java Basics - Anfänger-Themen 9
O Dezimalzahl in andere Zahlensysteme Java Basics - Anfänger-Themen 5
M Datei an andere Datei komplett anhängen Java Basics - Anfänger-Themen 11
S Methoden Rückgabewert einer Methode als Parameter an eine andere Methode übergeben, geht das? Java Basics - Anfänger-Themen 5
J Kann ein Objekt andere Objekte beinhalten ? Java Basics - Anfänger-Themen 33
S TextArea, RandomAccessFile, Apend und andere Tricks... Java Basics - Anfänger-Themen 7
O Variabeln aus einer andere Klasse dauerhaft einen anderen Wert übergeben Java Basics - Anfänger-Themen 5
K Best Practice In Klassen auf andere Objekte mit variablen Namen zugreifen Java Basics - Anfänger-Themen 6
O Methode in andere Klasse verlegt, "auslesen" einer HTML Seite verschnellert - Problem. Java Basics - Anfänger-Themen 4
K Zugriff einer Klasse auf eine andere Andere -> bad operand for binary operator Java Basics - Anfänger-Themen 5
S Klassen Mit Mainklasse auf andere zugreifen Java Basics - Anfänger-Themen 3
L Strings in andere Klassen "übergeben" Java Basics - Anfänger-Themen 3
N Probleme mit Class in andere Class adden (Cardlayout) Java Basics - Anfänger-Themen 2
P Eingabe aus JTextField/Area an eine andere Klasse übergeben. Java Basics - Anfänger-Themen 2
B Methode in andere Klasse verschieben Java Basics - Anfänger-Themen 9
G ResultSet übergeben bzw. in andere Variable übernehmen Java Basics - Anfänger-Themen 6
G Projekte importieren und andere Fragen Java Basics - Anfänger-Themen 3
Joew0815 Klassen Andere Klassse in Main starten Java Basics - Anfänger-Themen 8
M Daten in DB oder andere möglickeiten. Java Basics - Anfänger-Themen 5
S Erste Schritte import für andere Klassenfiles verfügbar machen? (Java unter Eclipse) Java Basics - Anfänger-Themen 8
N Klassen auf den Action Listener in einer andere Klasse zugreifen Java Basics - Anfänger-Themen 6
W objektorientierte Programmierung - String in andere Klasse übergeben Java Basics - Anfänger-Themen 13

Ähnliche Java Themen

Neue Themen


Oben