Objekt Serialisierung

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Guten Tag.
Ich habe ein kleines Problem. Ich muss eine Hashtable und 2 Objekte vom Typ MyDate (extends java.util.Date) in einer Datei speichern. Ich dachte das würde am einfachsten mit Object Serialisierung gehen.
Das einfachste wäre demnach eine Klasse zu schreiben die Object[] in eine Datei schreibt. Dies müsste doch zu berwerkstelligen sein, oder?
Allerdings bekomme ich immer merkwürdige Fehlermeldungen.

Das merkwürdigste ist, dass es funktionniert solange ich ohne OpenDialog fahre. d.h. immer die selbe Datei schreibe und öffne.

Ich bekomme folgende Fehlermeldung :

writing aborted; java.io.NotSerializableException: javax.swing.plaf.basic.BasicDirectoryModel$LoadFilesThread


Hier ist die Klasse die ich geschrieben habe :

Code:
package general;
import java.io.*;
import javax.swing.JFileChooser;


public class FileOutput implements Serializable  {
	public static final long serialVersionUID = 123456L;
	private class MyFileChooser extends JFileChooser{}
	MyFileChooser myChooser = new MyFileChooser();
	
	
	private File FileName;
	
	private class object implements Serializable 
	{	
		public Object[] data;
	}
	
	public void SaveToFile(Object[] data) 
	{
		int result = myChooser.showSaveDialog(null);
		if (result==JFileChooser.APPROVE_OPTION){
		FileName = myChooser.getSelectedFile();
		try{
		int i = data.length;
		FileOutputStream FileOut = new FileOutputStream(FileName);
		ObjectOutputStream ObjectOut = new ObjectOutputStream(FileOut);
		object Data = new object();
		Data.data = data;
		ObjectOut.writeObject(Data);
		ObjectOut.flush();
		ObjectOut.close();		
		}
		catch(Exception e){}}
	}
	
	public Object[] OpenFromFile()
	{
		int result = myChooser.showOpenDialog(null);
		if (result==JFileChooser.APPROVE_OPTION){
		FileName = myChooser.getSelectedFile();
		Object[] data = null;
		try{
		FileInputStream FileIn = new FileInputStream(FileName);
		ObjectInputStream ObjectIn = new ObjectInputStream(FileIn);
		object Data = (object) ObjectIn.readObject();
		data = Data.data;
		ObjectIn.close();		
		}
		catch (Exception Ex){System.out.println("Error :" + Ex.getMessage() ) ;}
		return data;}
		else return null;
		
	}

}

Ich hoffe ihr könnt mir weiterhelfen. Danke im Voraus.[/b]
 
Code:
   private class object implements Serializable
   {   
      public Object[] data;
   }

wasns das? absolut superblöder name "object" mit kleinem O

=> wenn in data ein Objekt ist, das nicht serialisierbar ist, dann kann das ganze array nicht serialisierbar sein!

und:

wozu das ganze? nimm doch viel lieber ein

Code:
    Serializable[] listevondingenzumspeichern

oder noch besser: leg deine Hashtable und deine zwei dates einfach in eine List...
 
Danke für deine Hilfe. Ich weiss object war ein blöder Name, allerdings war es ja auch bloss eine Probierversion.
Ich habe die Klasse nun umgeschrieben. allerdings bekomme ich nun folgende Fehlermeldung.


Error :writing aborted; java.io.NotSerializableException: Database.DataSet


Data.DataSet ist der Typ der Objekte im Hashtable. Muss die Klasse DataSet denn nun auch Serializable implementieren?

Hier der Code der neuen Klasse :

Code:
package general;
import java.io.*;
import javax.swing.JFileChooser;
import java.util.ArrayList;


public class FileOutput implements Serializable  {
	public static final long serialVersionUID = 123456L;
	private class MyFileChooser extends JFileChooser{}
	MyFileChooser myChooser = new MyFileChooser();
	
	
	private File FileName;
			
	public void SaveToFile(Object[] data) 
	{
		int result = myChooser.showSaveDialog(null);
		if (result==JFileChooser.APPROVE_OPTION){
		FileName = myChooser.getSelectedFile();
		try{
		int i = data.length;
		FileOutputStream FileOut = new FileOutputStream(FileName);
		ObjectOutputStream ObjectOut = new ObjectOutputStream(FileOut);
		ArrayList list = new ArrayList();
		for (int j=0;j<i;j++) list.add(data[j]);
		ObjectOut.writeObject(list);
		ObjectOut.flush();
		ObjectOut.close();		
		}
		catch(Exception e){}}
	}
	
	public Object[] OpenFromFile()
	{
		int result = myChooser.showOpenDialog(null);
		if (result==JFileChooser.APPROVE_OPTION){
		FileName = myChooser.getSelectedFile();
		Object[] data = null;
		try{
		FileInputStream FileIn = new FileInputStream(FileName);
		ObjectInputStream ObjectIn = new ObjectInputStream(FileIn);
		ArrayList Data = (ArrayList) ObjectIn.readObject();
		ObjectIn.close();	
		data = new Object[Data.size()];
		for (int i=0;i<Data.size();i++)data[i] = Data.get(i);
		}
		catch (Exception Ex){System.out.println("Error :" + Ex.getMessage() ) ;}
		return data;}
		else return null;
		
	}

}
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben