Supportnet Computer
Planet of Tech

Supportnet / Forum / Anwendungen(Java,C++...)

Java: InternalFrameListener





Frage

Hallo Ihrs, nachdem ich nun ein Bild in meine Oberflaeche geladen habe, moechte ich einige Buttons und Menupunkte aktivieren/deaktivieren, wenn dieses Fenster aktiviert/deaktivert/geschlossen wird. Dazu hab ich folgenden Code (Auszug aus der Prozedur loadFromFile() in meiner GUI): ... // Laden des Bildes nun abgeschlossen InternalFrame_.addInternalFrameListener(new InternalFrameAdapter() { public void internalFrameActivated(InternalFrameEvent e) { CurrentInternalFrame_ = InternalFrame_ ; setActive() ; } public void internalFrameDeactivated(InternalFrameEvent e) { setInactive() ; } public void internalFrameClosing(InternalFrameEvent e) { setInactive() ; } }) ; ... Aber irgendwie funktioniert das nicht. Es wird fehlerfrei kompiliert und es gibt keine Laufzeitfehler. Wer kann mir moegliche Ursachen/Fehler nennen? Danke! Schnoof

Antwort 1 von semi

Mach doch paar Bildschirmausgaben mit System.out.println, dann siehst Du welche Events ausgelöst werden und welche nicht.

public void internalFrameActivated(InternalFrameEvent e) {
  CurrentInternalFrame_ = e.getInternalFrame();
  System.out.println("internalFrameActivated: " + CurrentInternalFrame_.getTitle());
  setActive();
}



Antwort 2 von Schnoof

Lieber Michael,

irgendwie funktioniert das mit dem Fenster aktivieren/deaktivieren wohl nicht so recht, da kommt auch keine Ausgabe.

Beim Schliessen kommt dann folgendes:
Exception occurred during event dispatching:
java.lang.NullPointerException
at gui.LAGUI$10.internalFrameClosing(LAGUI.java, Compiled Code)
at javax.swing.JInternalFrame.fireInternalFrameEvent(JInternalFrame.java, Compiled Code)
at javax.swing.JInternalFrame.setClosed(JInternalFrame.java, Compiled Code)
at javax.swing.plaf.metal.MetalInternalFrameTitlePane.actionPerformed(MetalInternalFrameTitlePane.java, Compiled Code)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java, Compiled Code)
at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.java, Compiled Code)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java, Compiled Code)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java, Compiled Code)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java, Compiled Code)
at java.awt.Component.processMouseEvent(Component.java, Compiled Code)
at java.awt.Component.processEvent(Component.java, Compiled Code)
at java.awt.Container.processEvent(Container.java, Compiled Code)
at java.awt.Component.dispatchEventImpl(Component.java, Compiled Code)
at java.awt.Container.dispatchEventImpl(Container.java, Compiled Code)
at java.awt.Component.dispatchEvent(Component.java, Compiled Code)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java, Compiled Code)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java, Compiled Code)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java, Compiled Code)
at java.awt.Container.dispatchEventImpl(Container.java, Compiled Code)
at java.awt.Window.dispatchEventImpl(Window.java, Compiled Code)
at java.awt.Component.dispatchEvent(Component.java, Compiled Code)
at java.awt.EventQueue.dispatchEvent(EventQueue.java, Compiled Code)
at java.awt.EventDispatchThread.pumpOneEvent(EventDispatchThread.java, Compiled Code)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java, Compiled Code)
at java.awt.EventDispatchThread.run(EventDispatchThread.java, Compiled Code)

Meine Ausgabe erscheint nicht. Wieso habe ich ploetzlich einen Laufzeitfehler? Den hatte ich doch vorher nicht?

Danke!
Schnoof

Antwort 3 von semi

??? NullPointerException in internalFrameClosing.

Irgendwas ist nicht initialisiert oder nicht verfügbar (null). CurrentInternalFrame_ vielleicht?

Was machst Du eigentlich für Sachen in setActive() und setInactive()?


Antwort 4 von Schnoof

/**
* Activating of the MenuBar and of the ToolBar
*/
private void setActive()
{
LAMenuBar_.loadFromFile.setEnabled(false) ;
if (CurrentInternalFrame_.getMarkColour_)
{
LAMenuBar_.saveInFile.setEnabled(false) ;
LAMenuBar_.getMarkColour.setEnabled(false) ;
LAToolBar_.bSaveFile.setEnabled(false) ;
LAToolBar_.bMarkColour.setEnabled(false) ;
}
else
{
LAMenuBar_.saveInFile.setEnabled(true) ;
LAMenuBar_.getMarkColour.setEnabled(true) ;
LAToolBar_.bSaveFile.setEnabled(true) ;
LAToolBar_.bMarkColour.setEnabled(true) ;
}
}

/**
* Deactivating of the MenuBar and of the ToolBar
*/
private void setInactive()
{
LAMenuBar_.loadFromFile.setEnabled(true) ;
LAMenuBar_.saveInFile.setEnabled(false) ;
LAMenuBar_.getMarkColour.setEnabled(false) ;
LAToolBar_.bSaveFile.setEnabled(false) ;
LAToolBar_.bMarkColour.setEnabled(false) ;
}

Ich nehme an, normalerweise sollte CurrentInternalFrame_ bei internalFrameActivated initialisiert werden. Aber irgendwie scheint er genau das nicht machen (so wuerde ich das erst mal interpretieren). Die Fenster sind einfach da und koennen geschlossen werden. So lange es nur ein InternalFrame ist, scheint das kein Problem zu sein. Aber wenn ich ein zweites Bild oeffne, dann kommt beim Schliessversuch das obige ...

Menno ...
Schnoof

Antwort 5 von semi

Sorry, ich kann es nicht nachvollziehen.

Ich würde Dir empfehlen mal die Code Convensions für Java durchzulesen, Du hast etwas merkwürdige Art Klassenattribute (Variablen) zu benennen (Unterstriche, alles in Großbuchstaben). Oder dieses getMarkColour_. Es klingt wie Methodenname, ist aber eine Variable.

Siehe: http://java.sun.com/docs/codeconv/

Ist Deine Emailadresse korrekt? Wenn nicht dann schreibe die richtige, ich melde mich bei Dir.

Gruß,
Michael

Antwort 6 von Schnoof

OK, mag sein. Ich weiss auch nicht, woher ich das habe.

Adresse ist korrekt.

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: