Hallo,
ich habe das Problem, dass wenn in meiner Tabelle etwas markiert ist und ich sie dann abspeichern will nichts mehr Funktioniert bzw viele Fehlermeldungen erscheinen.
Natürlich hab ich auch schon gegooglet und anscheinend ist dieses Problem bekannt und es wurde geraten die Markierungen vor dem speichern zu entfernen. Genau das hab ich versucht allerdings bekomme ich immer noch Fehler, allerdings andere. Wäre nett wenn ihr mal drüber schauen könntet.
Fehlermeldung:
ich habe das Problem, dass wenn in meiner Tabelle etwas markiert ist und ich sie dann abspeichern will nichts mehr Funktioniert bzw viele Fehlermeldungen erscheinen.
Natürlich hab ich auch schon gegooglet und anscheinend ist dieses Problem bekannt und es wurde geraten die Markierungen vor dem speichern zu entfernen. Genau das hab ich versucht allerdings bekomme ich immer noch Fehler, allerdings andere. Wäre nett wenn ihr mal drüber schauen könntet.
Java:
package main;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.*;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
class Hello extends JFrame implements ActionListener
{
JTable table;
MyColumnModel columnModel;
MyTableModel tableModel;
JButton sentry;
Hello() throws ClassNotFoundException, IOException, Exception
{
Object[] columnData = new Object[]{
"Aktiviert", 60, //column 1: header value, width
"Business Type", 80, //column 1: header value, width
"Höchstpreis", 80, //column 1: header value, width
"Kategorie", 240, //column 2: header value, width
"Keywords", 240, //column 3: header value, width
};
table = new JTable();
tableModel = new MyTableModel(5);
columnModel = new MyColumnModel(columnData);
table.setModel(tableModel);
table.setColumnModel(columnModel);
table.getColumn("Aktiviert").setCellRenderer(new BooleanCellRenderer());
table.getColumn("Aktiviert").setCellEditor(new BooleanCellEditor());
Vector<String> vec3 = new Vector<String>();
vec3.add("Privat");
vec3.add("Geschäftlich");
table.getColumn("Business Type").setCellRenderer(new ComboCellRenderer(vec3));
table.getColumn("Business Type").setCellEditor(new ComboCellEditor(vec3));
sentry = new JButton("Speichern");
sentry.addActionListener(this);
Vector<Comparable> vector = new Vector<Comparable>();
vector.add(new Boolean(true));
vector.add(null);
vector.add("fsdf");
vector.add("fdsf");
vector.add("fsdf");
tableModel.addRow(vector);
this.setSize( 700, 700 );
this.add(BorderLayout.NORTH, new JScrollPane(table));
this.add(BorderLayout.SOUTH, sentry);
this.setVisible(true);
loadTable();
}
void saveTable() {
try {
ObjectOutputStream o = new ObjectOutputStream(new BufferedOutputStream( new FileOutputStream("save.xml")));
// o.writeObject(table);
o.writeObject(tableModel);
o.writeObject(columnModel);
o.close();
} catch (IOException e) {
e.printStackTrace();
}
}
void loadTable() throws IOException, ClassNotFoundException, Exception {
try {
ObjectInputStream o = new ObjectInputStream(new BufferedInputStream(new FileInputStream("save.xml")));
// table = null;
// table = (JTable)o.readObject();
tableModel = (MyTableModel) o.readObject();
table.setModel(tableModel);
columnModel = (MyColumnModel) o.readObject();
table.setColumnModel(columnModel);
o.close();
} catch (FileNotFoundException ex) {
}
}
public static void main ( String[] args ) throws ClassNotFoundException, IOException, Exception
{
Hello hey = new Hello();
}
@Override
public void actionPerformed(ActionEvent e) {
table.clearSelection();
saveTable();
}
}
Fehlermeldung:
Java:
java.io.NotSerializableException: javax.swing.JTable$CellEditorRemover
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1180)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1528)
at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:438)
at javax.swing.JTable.writeObject(JTable.java:5844)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:962)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1480)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)
at javax.swing.event.EventListenerList.writeObject(EventListenerList.java:257)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:962)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1480)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1528)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1493)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)
at main.Hello.saveTable(HelloWorld.java:88)
at main.Hello.actionPerformed(HelloWorld.java:120)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2713)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707)
at java.awt.EventQueue.access$000(EventQueue.java:101)
at java.awt.EventQueue$3.run(EventQueue.java:666)
at java.awt.EventQueue$3.run(EventQueue.java:664)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:680)
at java.awt.EventQueue$4.run(EventQueue.java:678)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:677)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:1761)
at javax.swing.plaf.ComponentUI.update(ComponentUI.java:161)
at javax.swing.JComponent.paintComponent(JComponent.java:778)
at javax.swing.JComponent.paint(JComponent.java:1054)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5221)
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1482)
at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1413)
at javax.swing.RepaintManager.paint(RepaintManager.java:1206)
at javax.swing.JComponent._paintImmediately(JComponent.java:5169)
at javax.swing.JComponent.paintImmediately(JComponent.java:4980)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:770)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:728)
at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:677)
at javax.swing.RepaintManager.access$700(RepaintManager.java:59)
at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1621)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705)
at java.awt.EventQueue.access$000(EventQueue.java:101)
at java.awt.EventQueue$3.run(EventQueue.java:666)
at java.awt.EventQueue$3.run(EventQueue.java:664)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:675)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Zuletzt bearbeitet: