PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem beim Speichern (Java)


Antineutrino
2004-02-20, 16:41:37
Ich will 2 Objekte speichern, bekomme aber immer nur eine merkwürdige Fehlermeldung


Exception occurred during event dispatching:
java.lang.NullPointerException
at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:939)
at javax.swing.plaf.ComponentUI.update(ComponentUI.java:142)
at javax.swing.JComponent.paintComponent(JComponent.java:541)
at javax.swing.JComponent.paint(JComponent.java:808)
at javax.swing.JComponent.paintChildren(JComponent.java:647)
at javax.swing.JComponent.paint(JComponent.java:817)
at javax.swing.JViewport.paint(JViewport.java:722)
at javax.swing.JComponent.paintChildren(JComponent.java:647)
at javax.swing.JComponent.paint(JComponent.java:817)
at javax.swing.JComponent.paintChildren(JComponent.java:647)
at javax.swing.JComponent.paint(JComponent.java:817)
at javax.swing.JComponent.paintChildren(JComponent.java:647)
at javax.swing.JComponent.paint(JComponent.java:817)
at javax.swing.JLayeredPane.paint(JLayeredPane.java:557)
at javax.swing.JComponent.paintChildren(JComponent.java:647)
at javax.swing.JComponent.paintWithOffscreenBuffer(JComponent.java:4794)
at javax.swing.JComponent.paintDoubleBuffered(JComponent.java:4740)
at javax.swing.JComponent.paint(JComponent.java:798)
at java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:21)
at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:60)
at sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:97)
at java.awt.Container.paint(Container.java:1312)
at sun.awt.RepaintArea.paint(RepaintArea.java:177)
at sun.awt.windows.WComponentPeer.handleEvent(WComponentPeer.java:260)
at java.awt.Component.dispatchEventImpl(Component.java:3678)
at java.awt.Container.dispatchEventImpl(Container.java:1627)
at java.awt.Window.dispatchEventImpl(Window.java:1606)
at java.awt.Component.dispatchEvent(Component.java:3477)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:456)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:2 01)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151 )
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:141 )
at java.awt.Dialog$1.run(Dialog.java:540)
at java.awt.Dialog.show(Dialog.java:561)
at javax.swing.JOptionPane.showOptionDialog(JOptionPane.java:840)
at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:642)
at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:613)
at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:584)
at MeinActionListener.actionPerformed(MeinActionListener.java:130)
at javax.swing.JFileChooser.fireActionPerformed(JFileChooser.java:1678)
at javax.swing.JFileChooser.approveSelection(JFileChooser.java:1588)
at javax.swing.plaf.basic.BasicFileChooserUI$ApproveSelectionAction.actionPerformed (BasicFileChooserUI.java:809)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1786)
at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.ja va:1839)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.jav a:245)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:231)
at java.awt.Component.processMouseEvent(Component.java:5100)
at java.awt.Component.processEvent(Component.java:4897)
at java.awt.Container.processEvent(Container.java:1569)
at java.awt.Component.dispatchEventImpl(Component.java:3615)
at java.awt.Container.dispatchEventImpl(Container.java:1627)
at java.awt.Component.dispatchEvent(Component.java:3477)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3483)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3198)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3128)
at java.awt.Container.dispatchEventImpl(Container.java:1613)
at java.awt.Window.dispatchEventImpl(Window.java:1606)
at java.awt.Component.dispatchEvent(Component.java:3477)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:456)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:2 01)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151 )
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:141 )
at java.awt.Dialog$1.run(Dialog.java:540)
at java.awt.Dialog.show(Dialog.java:561)
at javax.swing.JFileChooser.showDialog(JFileChooser.java:696)
at javax.swing.JFileChooser.showSaveDialog(JFileChooser.java:624)
at MeinActionListener.actionPerformed(MeinActionListener.java:110)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1786)
at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.ja va:1839)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
at javax.swing.AbstractButton.doClick(AbstractButton.java:289)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1113)
at javax.swing.plaf.basic.BasicMenuItemUI$MouseInputHandler.mouseReleased(BasicMenu ItemUI.java:943)
at java.awt.Component.processMouseEvent(Component.java:5100)
at java.awt.Component.processEvent(Component.java:4897)
at java.awt.Container.processEvent(Container.java:1569)
at java.awt.Component.dispatchEventImpl(Component.java:3615)
at java.awt.Container.dispatchEventImpl(Container.java:1627)
at java.awt.Component.dispatchEvent(Component.java:3477)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3483)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3198)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3128)
at java.awt.Container.dispatchEventImpl(Container.java:1613)
at java.awt.Window.dispatchEventImpl(Window.java:1606)
at java.awt.Component.dispatchEvent(Component.java:3477)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:456)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:2 01)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151 )
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)


//Speichern
if (e.getActionCommand() == "ApproveSelection" && ((JFileChooser) e.getSource()).getDialogType() == 1 && e.getSource() == ob.getSpeichernLaden()) {
try {
ObjectOutputStream o = new ObjectOutputStream(new FileOutputStream(((JFileChooser) e.getSource()).getSelectedFile()));
o.writeObject(ob.getSorter().getModel());
o.writeObject(ob.getW());
o.close();
} catch (FileNotFoundException e1) {
JOptionPane.showMessageDialog(ob, "Datei nicht gefunden");
} catch (IOException e1) {
JOptionPane.showMessageDialog(ob, "Fehler beim Schreiben der Datei");
}
}

ethrandil
2004-02-20, 18:10:55
Aus welcher Zeile kommt denn dieser Fehler?

- Eth

Antineutrino
2004-02-20, 19:04:11
Das ist es ja. Ich kann ihn nicht richtig zuordnen. Die Klassen außer MeinActionListener sind doch gar nicht von mir.

HellHorse
2004-02-20, 19:51:11
...
at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:584)
at MeinActionListener.actionPerformed(MeinActionListener.java:130)
...
at javax.swing.JFileChooser.showSaveDialog(JFileChooser.java:624)
at MeinActionListener.actionPerformed(MeinActionListener.java:110)
...

So wie es aussieht, gibt's eine NullPointerException, wenn du entweder einen JFileChooser (Zeile 130) oder ein JOptionPane Dialog (Zeile 110) anzeigen lässt.
Ich würde mir die entsprechenden Zeilen mal anschauen und sicherstellen, dass dort nix null sein kann.

Antineutrino
2004-02-20, 20:43:42
Am JOptionPane liegts nicht, selbst wenn ich die auskommentiere kommt der Fehler.

Allerdings dann nur beim zweiten mal Speichern oder wenn ich eine alte Datei überschreibe.

Die Exception sieht jetzt so aus:


java.lang.NullPointerException
at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:939)
at javax.swing.plaf.ComponentUI.update(ComponentUI.java:142)
at javax.swing.JComponent.paintComponent(JComponent.java:541)
at javax.swing.JComponent.paint(JComponent.java:808)
at javax.swing.JComponent.paintChildren(JComponent.java:647)
at javax.swing.JComponent.paint(JComponent.java:817)
at javax.swing.JViewport.paint(JViewport.java:722)
at javax.swing.JComponent.paintChildren(JComponent.java:647)
at javax.swing.JComponent.paint(JComponent.java:817)
at javax.swing.JComponent.paintChildren(JComponent.java:647)
at javax.swing.JComponent.paint(JComponent.java:817)
at javax.swing.JComponent.paintChildren(JComponent.java:647)
at javax.swing.JComponent.paint(JComponent.java:817)
at javax.swing.JLayeredPane.paint(JLayeredPane.java:557)
at javax.swing.JComponent.paintChildren(JComponent.java:647)
at javax.swing.JComponent.paintWithOffscreenBuffer(JComponent.java:4794)
at javax.swing.JComponent.paintDoubleBuffered(JComponent.java:4740)
at javax.swing.JComponent.paint(JComponent.java:798)
at java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:21)
at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:60)
at sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:97)
at java.awt.Container.paint(Container.java:1312)
at sun.awt.RepaintArea.paint(RepaintArea.java:177)
at sun.awt.windows.WComponentPeer.handleEvent(WComponentPeer.java:260)
at java.awt.Component.dispatchEventImpl(Component.java:3678)
at java.awt.Container.dispatchEventImpl(Container.java:1627)
at java.awt.Window.dispatchEventImpl(Window.java:1606)
at java.awt.Component.dispatchEvent(Component.java:3477)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:456)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:2 01)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151 )
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)

HellHorse
2004-02-20, 22:54:38
Ist das der komplette Stacktrace? Wann erscheint der genau?
Hast du vorher noch was an der Tabelle (JTable, TableModel, TableColumnModel, ...) rumgefummelt?

Antineutrino
2004-02-21, 08:40:00
Ja, das ist alles. Der erscheint, nachdem ich im JFileChooser auf Speichern geklickt hab.

Voher ändere ich nur hier etwas:

if (e.getActionCommand() == "OK DVDHinzufügen") {
DVD d = new DVD(hin);
DefaultTableModel dtm = ob.getTabellenModel();
dtm.addRow(d.gibVektorMitDaten());
ob.getSorter().setModel(dtm);
ob.addW(d.gibVektorMitCover());
ob.getSorter().sortByColumn(0);
hin.dispose();
}

Selbst wenn ich mit dem try-catch-Block moch eine NullPointerException auffange, kommt die Exception immer noch.

HellHorse
2004-02-21, 10:29:34
Ich habe da so eine Ideee

hin.dispose();

Was ist hin? Wer hat alles eine Referenz darauf? Doch nicht etwa dein JFileChooser oder?
Was hast du dem JFileChooser alles für Argumente übergeben? Kann davon eines null sein?

Antineutrino
2004-02-21, 11:36:10
Das ist es leider nicht. Mei JFileChooser kommt von "ob.getSpeichernLaden()". Mit setVisible(false) anstatt dispose() kommt beim zweiten mal Speichern wieder die Exception.

Wie gesagt, ich kann einmal Speichern aber ein zweites mal dieselben Daten nicht mehr.

HellHorse
2004-02-21, 13:29:58
Na also, jetzt musst du "nur" noch rausfinden, welchen Fehler du beim ersten Mal speichern machst ;)


at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:939)

Sieht aus, als wolle Swing eine JTable zeichnen und hat dann ein Problem. Ich würde mal da ansetzten und prüfen, ob nicht versehentlicherweise irgendwo an der Tabelle etwas geändert wird.

Antineutrino
2004-02-21, 16:14:10
Ich hab die Reihenfolge wie die beiden Objekte gespeichert werden vertauscht. Jetzt bekomme ich eine neue Exception.

Im Vektor w ist ein ImageIcon gespeichert, das ich aus einem JLabel auslese. Anscheinend liegt da das Problem.


//Speichern
if (e.getActionCommand() == "ApproveSelection" && ((JFileChooser) e.getSource()).getDialogType() == 1 && e.getSource() == ob.getSpeichernLaden()) {
try {
ObjectOutputStream o = new ObjectOutputStream(new FileOutputStream(((JFileChooser) e.getSource()).getSelectedFile()));

// Die beiden vertauscht
o.writeObject(ob.getW());
o.writeObject(ob.getSorter().getModel());

o.close();
} catch (FileNotFoundException e1) {
JOptionPane.showMessageDialog(ob, "Datei nicht gefunden");
} catch (IOException e1) {
JOptionPane.showMessageDialog(ob, "Fehler beim Schreiben der Datei");
}
}


java.io.IOException: failed to load image contents
at javax.swing.ImageIcon.writeObject(ImageIcon.java:415)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.jav a:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:809)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1296)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1247)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1052)
at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1224)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1050)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1332)
at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:367)
at java.util.Vector.writeObject(Vector.java:1017)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.jav a:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:809)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1296)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1247)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1052)
at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1224)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1050)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1332)
at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:367)
at java.util.Vector.writeObject(Vector.java:1017)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.jav a:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:809)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1296)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1247)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1052)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:278)
at MeinActionListener.actionPerformed(MeinActionListener.java:133)
at javax.swing.JFileChooser.fireActionPerformed(JFileChooser.java:1678)
at javax.swing.JFileChooser.approveSelection(JFileChooser.java:1588)
at javax.swing.plaf.basic.BasicFileChooserUI$DoubleClickListener.mouseClicked(Basic FileChooserUI.java:412)
at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:212)
at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:211)
at java.awt.Component.processMouseEvent(Component.java:5103)
at java.awt.Component.processEvent(Component.java:4897)
at java.awt.Container.processEvent(Container.java:1569)
at java.awt.Component.dispatchEventImpl(Component.java:3615)
at java.awt.Container.dispatchEventImpl(Container.java:1627)
at java.awt.Component.dispatchEvent(Component.java:3477)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3483)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3207)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3128)
at java.awt.Container.dispatchEventImpl(Container.java:1613)
at java.awt.Window.dispatchEventImpl(Window.java:1606)
at java.awt.Component.dispatchEvent(Component.java:3477)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:456)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:2 01)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151 )
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:141 )
at java.awt.Dialog$1.run(Dialog.java:540)
at java.awt.Dialog.show(Dialog.java:561)
at javax.swing.JFileChooser.showDialog(JFileChooser.java:696)
at javax.swing.JFileChooser.showSaveDialog(JFileChooser.java:624)
at MeinActionListener.actionPerformed(MeinActionListener.java:120)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1786)
at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.ja va:1839)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
at javax.swing.AbstractButton.doClick(AbstractButton.java:289)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1113)
at javax.swing.plaf.basic.BasicMenuItemUI$MouseInputHandler.mouseReleased(BasicMenu ItemUI.java:943)
at java.awt.Component.processMouseEvent(Component.java:5100)
at java.awt.Component.processEvent(Component.java:4897)
at java.awt.Container.processEvent(Container.java:1569)
at java.awt.Component.dispatchEventImpl(Component.java:3615)
at java.awt.Container.dispatchEventImpl(Container.java:1627)
at java.awt.Component.dispatchEvent(Component.java:3477)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3483)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3198)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3128)
at java.awt.Container.dispatchEventImpl(Container.java:1613)
at java.awt.Window.dispatchEventImpl(Window.java:1606)
at java.awt.Component.dispatchEvent(Component.java:3477)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:456)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:2 01)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151 )
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)

Antineutrino
2004-02-22, 09:52:11
So, jetzt hab ich die Lösung. Der Fehler kommt nur, wenn man das Programm von Eclipse aus startet. :)
Da muß man auch erst mal drauf kommen...

Senior Sanchez
2004-02-22, 22:36:14
if(e.getActionCommand() == "ApproveSelection"...


nur mal sone anmerkung. Strings sind objekte und die vergleicht man eigentlich per equals() und nicht per vergleichsoperator ;-)) damit vergleichste nur die referenzen. Wundert mich übrigens dass das so klappt.


mfg Senior Sanchez

HellHorse
2004-02-23, 10:14:03
Original geschrieben von Senior Sanchez
nur mal sone anmerkung. Strings sind objekte und die vergleicht man eigentlich per equals() und nicht per vergleichsoperator ;-)) damit vergleichste nur die referenzen. Wundert mich übrigens dass das so klappt.


mfg Senior Sanchez
Und man sollte sie sicher nicht hardcoden, sondern Konstanten verwenden (dann kann man allerdings wieder == verwenden); gleiches für den JFileChooser Dialogtyp; dann gibt es das Gesetz von Demeter; 6 Methodenaufrufe auf einer Zeile sind auch nicht so das Wahre; keinen LayoutManager sollte man nur verwenden, wenn man verdammt gut weiss, was man macht; dann könnte man eine dedizierte Klasse für den Speichern Knopf/Menüeintrag machen, dann müsste man das alles nicht überprüfen und wäre leichter wartbar;...
Aber nicht alles auf einmal ;)