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
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()?
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
* 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
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.
Adresse ist korrekt.