Swing JFrame==null und doch nicht null?!

  • Themenstarter Themenstarter Gelöschtes Mitglied 20545
  • Beginndatum Beginndatum
G

Gelöschtes Mitglied 20545

Gast
Hallo,

meine Menu-Klasse soll von einem JFrame nur eine Instanz zulassen und wenn sie existiert, das Frame mit der Methode .showUpAt(JFrame) an eine bestimmte Stelle setzen. OPTIONDIALOG ist ein JFrame und folgender Code ist der ActionListener eines MenuItems:

Java:
public void actionPerformed(ActionEvent e){
     if(OPTIONDIALOG==null){
          OPTIONDIALOG = new OptionDialog();
     }
     else{
          if(OPTIONDIALOG.getState()==JFrame.ICONIFIED) OPTIONDIALOG.setState(JFrame.NORMAL);
          OPTIONDIALOG.showUpAt(MAINFRAME);
    }
}

Das Problem ist nun folgendes: Es wird kein neues Objekt erzeugt, sondern lediglich das alte JFrame wieder angezeigt; wenn ich jedoch den if-else-Block jedoch weg lasse und nur OPTIONDIALOG=new OptionDialog() aufrufe, wird ein neues JFrame erzeugt. OptionDialog wird mit dispose() geschlossen, das setzt ja das Objekt noch nicht auf null, aber selbst wenn ich im if-Block OPTIONDIALOG=null; (oO) schreibe, hilft es nichts.
Was tun?
 
Zuletzt bearbeitet von einem Moderator:
Schaut soweit eigentlich korrekt aus (mal davon abgesehen, dass OPTIONDIALOG nicht komplett groß geschrieben werden sollte). Wie wäre es evtl. mit einem KSKB?

Nachtrag: Sehe gerade, du hast deinen Beitrag noch einmal editiert. Dann wird OPTIONDIALOG woll nicht null gesetzt.
 
habe es nicht selbst getestet aber folgende Änderung in der if-Abfrage sollte helfen
Java:
if(OPTIONDIALOG==null || !OPTIONDIALOG.isDisplayable()){
          OPTIONDIALOG = new OptionDialog();
     }
 
Es hat geholfen, danke! Aber warum? Wenn OPTIONDIALOG==null, kann nichts darauf aufgerufen werden, und das war ja vorher erfüllt, also eigentlich dürfte .isDisplayable() doch gar nicht aufgerufen werden können oO

Edit:

Falsch! OPTIONDIALOG war nicht null, sondern die Methode showUpAt(JFrame) enthielt pack() und hat damit das alte Frame wieder angezeigt! Peinlich, peinlich....danke für die Hilfe.
 
Zuletzt bearbeitet von einem Moderator:
Es hat geholfen, danke! Aber warum? Wenn OPTIONDIALOG==null, kann nichts darauf aufgerufen werden, und das war ja vorher erfüllt, also eigentlich dürfte .isDisplayable() doch gar nicht aufgerufen werden können oO


Nur zur Vervollständigung: Eine solche if Abfrage mit sowas wie && oder || prüft (natürlich) zuerst den ersten Ausdruck. Sollte dieser schon die Bedingung erfüllen, werden die anderen nicht mehr mehr überprüft.
Darum würde es in deinem Fall nie zu einer NullPointerException kommen, da wenn OPTIONDIALOG==null ist bereits in den "if-Zweig" gesprungen wird. Nur wenn OPTIONDIALOG etwas anderes als null ist wird OPTIONDIALOG.isDisplayable() aufgerufen.

Korregiert mich, falls ich falsch liege!
 

Zurück
Oben