AWT Fenster schließen und Programm beenden

schiel

Mitglied
Ich habe mit dem JavaEditor ein GUI-Programm geschrieben.
Das Programm-Fenster hat den Namen "hello" und ist eine Instanz der Klasse "Frame".

Nun soll beim Betätigen eines Buttons das Fenster geschlossen und das Programm beendet werden.
Dazu habe ich folgenden Code verwendet:

Java:
public void btCloseActionPerformed(ActionEvent evt) {
     hello.setVisible(false);
     hello.dispose();
     System.exit(0);
  }

Meine Fragen:
(1) Muss ich das Frame (mit setVisible und dispose) explizit schließen, um den Speicher freizugeben, oder passiert das bei System.exit(0) automatisch?

(2) Beim Kompilieren erhalte ich die folgenden Fehlermeldungen:
non-static method setVisible(boolean) cannot be referenced from a static context
non-static method dispose() cannot be referenced from a static context
Was hat das zu bedeuten, wie kann ich den Fehler beseitigen?

Danke - sagt der Michael
 
Zuletzt bearbeitet:
Moin,

(2) Beim Kompilieren erhalte ich die folgenden Fehlermeldungen:
non-static method setVisible(boolean) cannot be referenced from a static context
non-static method dispose() cannot be referenced from a static context
Was hat das zu bedeuten, wie kann ich den Fehler beseitigen?

um Deine Frage zu beantworten:

die von Dir verwendeten Methoden sind nicht als static deklariert und Du versuchst sie ohne eine entsprechende Objekt-Instanz aufzurufen !
Die Fehlermeldung besagt nun, dass du aus der static-Umgebung (also der Klasse) nicht die non-static (also Instanz-) Methode aufrufen kannst, denn diese "existiert" ja erst nach dem Erzeugen einer Instanz der zugehörigen Klasse. D. h. Du musst sie über die Objektinstanz aufrufen 😉

Gruß
Klaus
 
Zuletzt bearbeitet:
Der Tipp von David ist schon ausreichend.

Allerdings sollte in deinem Code-Beispiel schon reichen wenn du nur
Java:
     hello.setVisible(false);
     hello.dispose();

aufrufst. Damit wird das Fenster unsichtbar gemacht und, naja, geschlossen. Aber deine JVM kann weiter laufen, was du mit
Code:
System.exit(0)
aber verhindern würdest. Generell sollte man, v. a. in größeren Projekten nie
Code:
System.exit(..)
aufrufen.
 
Solange das Programm auch wirklich beendet wurde, würde ich mir keine Sorgen machen, da kümmert sich die JVM schon drum 🙂

EDIT: der Edit machte keinen Sinn
 
Zuletzt bearbeitet:
die von Dir verwendeten Methoden sind nicht als static deklariert und Du versuchst sie ohne eine entsprechende Objekt-Instanz aufzurufen !
Die Fehlermeldung besagt nun, dass du aus der static-Umgebung (also der Klasse) nicht die non-static (also Instanz-) Methode aufrufen kannst, denn diese "existiert" ja erst nach dem Erzeugen einer Instanz der zugehörigen Klasse. D. h. Du musst sie über die Objektinstanz aufrufen 😉

Hm, da brauch ich dann wohl Nachhilfe in Sachen Objektorientierter Programmierung.
Ich habe es bisher so gesehen: "hello" IST eine Instanz der Klasse "Frame". Und mit hello.dispose wird die Methode dispose der Instanz hello aufgerufen. Offensichtlich hab ich da was nicht richtig verstanden.

Wie also: "Du musst sie über die Objektinstanz aufrufen"?
 

Zurück
Oben