JTable speichern, Fehler bei Selection

FaxXer

Mitglied
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.

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:
Hä wie was meinst du? Ich schreibe das tableModel in eine Datei klar geht dass. Funktioniert ja auch solange man keine zeile in der Tabelle markiert und dann speichert.
Ich verstehe jetzt nur nicht warum clearSelection einen Fehler wirft..
 

Neue Themen


Zurück
Oben