Swing Laden von serialisierten Objekten (invalid type code AC))

Blagg Dogg

Mitglied
hi,

ich bin gerade dabei, ein adressbuch zu schreiben (zu übungszwecken) das soll so ablaufen, dass ich die eingegebenen adressen als adress-objekte seialisiere und später wieder deserialisiere. und genau hier ist das problem: wenn ich die objekte wieder lesen will, wird die erste adresse gut gelesen und dann kommt die folgende fehlermeldung:

java.io.StreamCorruptedException: invalid type code: AC
invalid type code: AC
at java.io_ObjectInputStream.readObject0(Unknown Source)
at java.io_ObjectInputStream.readObject(Unknown Source)
at data.ReadData.deserealize(ReadData.java:26)
at main.MainBook.buildCenter(MainBook.java:102)
at main.MainBook.create(MainBook.java:54)
at client.MyClient.main(MyClient.java:21)


hier mal kurz die zwei klassen:
folgende klasse liest die daten und gibt diese als arraylist zurück:
Java:
package data;

import java.io.*;
import java.util.ArrayList;

import utilities.MyMsg;

import main.Adresse;

public class ReadData {
	
	@SuppressWarnings("finally")
	public ArrayList<Adresse> deserealize(){
		ArrayList<Adresse> result = new ArrayList<Adresse>();
		
		try {
			FileInputStream fin = new FileInputStream("data2.ser");
			ObjectInputStream oin = new ObjectInputStream(fin);
			
			while(true){
				try{
					//	Adresse temp = (Adresse)oin.readObject();
					
					Object o = oin.readObject();
					if(o instanceof Adresse){
						
						Adresse temp = (Adresse)o;
						result.add(temp);
					}	
				} catch (EOFException e) {
					break;
				}
			}
			
			
			oin.close();
	
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			new MyMsg("Keine Daten gefunden - Bitte Neue Daten anlegen").setVisible(true);
		}
		
		catch (IOException e){
			e.printStackTrace();
			System.out.println(e.getMessage());
		}
		
		finally{
			return result;
			
		}
		
	}

}

...und folgende ist das hauptbuch mit der jtable in der man dann namen auswählen kann (auszug):
Java:
	private JPanel buildCenter(){
		JPanel p = new JPanel(new BorderLayout());
		
		adressen=new ReadData().deserealize();

		
		p.setBorder(BorderFactory.createTitledBorder("Meine Kontakte"));
		
		final JList list = new JList(adressen.toArray()) {
		    public String getToolTipText(MouseEvent evt) {
		    	int index = locationToIndex(evt.getPoint());
		        return ((Adresse)adressen.toArray()[index]).vorname + " " + ((Adresse)adressen.toArray()[index]).name + " (" + ((Adresse)adressen.toArray()[index]).gruppe + ")";
		    }
		};;
		
		p.add(list);
		

		JButton details = new JButton("Details");
		details.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				if (list.getSelectedIndex()==-1) new MyMsg("Bitte erst Namen wählen").setVisible(true);
				else new ShowAdress((Adresse) adressen.toArray()[list.getSelectedIndex()]).setVisible(true);
				
			}
		});
		
		JButton delete = new JButton("Kontakt entfernen");
		delete.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				if (list.getSelectedIndex()==-1) new MyMsg("Bitte erst Namen wählen").setVisible(true);
				
				//Sonst Abfrage
			}
		});
		
		JPanel button = new JPanel(new FlowLayout(FlowLayout.CENTER));
		button.add(details);
		button.add(delete);
		p.add(button, BorderLayout.SOUTH);

		
		return p;
	}

könnt ihr mir da helfen, wäre super nett :p

ps: ich muss mit sicherheit auch noch irgendwo invokeLater einbauen, weiß aber nicht wo...
 

AlexSpritze

Bekanntes Mitglied
Abgesehen von dem Problem, wäre es nicht sinnvoller für ein Adressebuchprogramm eine Datenbank zu nutzen?

Du schreibst alle Adressen in eine Datei? "invalid type code: AC" deutet lt. java - StreamCorruptedException: invalid type code: AC - Stack Overflow darauf hin, dass du in der einen Datei mehrere Header hast. Darum wäre vielleicht eher interessant, wie du die Adressen serialisierst.


Auch würde ich deine deserialize Methode etwas anders schreiben.
Java:
    public ArrayList<Adresse> deserealize(){
        ArrayList<Adresse> result = new ArrayList<Adresse>();
        
        ObjectInputStream oin = null;
        try {
            FileInputStream fin = new FileInputStream("data2.ser");
            oin = new ObjectInputStream(fin);
            while(true){
                try{
                    //  Adresse temp = (Adresse)oin.readObject();
                    
                    Object o = oin.readObject();
                    if(o instanceof Adresse){
                        
                        Adresse temp = (Adresse)o;
                        result.add(temp);
                    }   
                } catch (EOFException e) {
                    break;
                }
            }
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            new MyMsg("Keine Daten gefunden - Bitte Neue Daten anlegen").setVisible(true);
        }
        catch (IOException e){
            e.printStackTrace(System.err);
            System.out.println(e.getMessage());
        }
        finally{
          try {
            if (oin != null) {
              oin.close();
            }
          } catch (IOException e) {
            //nevermind
          }
        }        return result;
    }
 

Blagg Dogg

Mitglied
das ist meine klasse, die die adressen in die datei schreibt:

Java:
package data;

import java.io.*;

import main.*;
import utilities.MyMsg;

public class WriteData {
	
	public void serialize(Adresse a){
		try {
			ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("data2.ser", true));
			out.writeObject(a);
			
			
		out.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			new MyMsg("Fehler beim Anlegen der Datei.").setVisible(true);
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			new MyMsg("Fehler beim Schreiben der Datei.").setVisible(true);
			e.printStackTrace();
		}
	}

}

dieses true beim objectoutputstream bedeutet doch anhängen, falls datei existiert, oder?

edit: hierbei wird keine exception geworfen.
 

AlexSpritze

Bekanntes Mitglied
Ja, das
Code:
true
ist das Problem. Damit werden neue Daten an die Datei angehängt, aber bei der Serialisierung werden auch immer Header-Informationen geschrieben, die stehen dann mehrfach in einer Datei. Beim Deserialisieren verschluckt sich der ObjectInputStream an den zusätzlichen Header-Informationen, die mitten in der Datei stehen, wo sie wohl nicht hingehören.

Du müsstest wohl immer alle Adressen wieder neu serialisieren. Oder eben eine Datenbank. Wenn du noch nicht mit Datenbanken gearbeitet hast, hier hat das schonmal jemand mit einem Adressbuch versucht: Java Swing Address Book
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
thor_norsk Icons laden nicht in GUI AWT, Swing, JavaFX & SWT 15
Jose05 Aus einer normalen Java Klasse eine FXML-Klasse laden AWT, Swing, JavaFX & SWT 12
G JavaFX Wert aus DB lesen, wenn erfolgreich automatisch eine fxml laden, möglich? AWT, Swing, JavaFX & SWT 2
K JavaFX Bildergalerie aus Image Ordner laden AWT, Swing, JavaFX & SWT 3
L JavaFX .fxml laden klappt nicht AWT, Swing, JavaFX & SWT 16
DeBoiJoshua 2D-Grafik Gif Animation will nicht laden AWT, Swing, JavaFX & SWT 1
R Grafik per JButton laden und austauschen lassen AWT, Swing, JavaFX & SWT 14
H Images laden nicht AWT, Swing, JavaFX & SWT 14
B Swing Sudoku: Laden / Speichern von Zahlen aus/in mehrere JTextFields aus/in eine(r) Textdatei AWT, Swing, JavaFX & SWT 9
A Swing Datei lässt sich zwar speichern, aber nicht laden (Inhalt im JTextField anzeigen) AWT, Swing, JavaFX & SWT 18
C Swing F5 Taste neu laden auf ganzen Frame AWT, Swing, JavaFX & SWT 9
N Swing Image aus Web laden und in Icon umwandeln AWT, Swing, JavaFX & SWT 4
J Bild von anderer Klasse will nicht laden AWT, Swing, JavaFX & SWT 1
F JavaFX PNG aus einem resource Ordner laden AWT, Swing, JavaFX & SWT 8
L JavaFX LoadException beim Laden von JavaFX Anwendung AWT, Swing, JavaFX & SWT 6
F JButtons neu laden AWT, Swing, JavaFX & SWT 4
M AWT Laden von Sprites AWT, Swing, JavaFX & SWT 3
Thallius JTable dynamisch laden? AWT, Swing, JavaFX & SWT 2
@SupressWarnings() JavaFX Bilder in executable jar laden AWT, Swing, JavaFX & SWT 5
S JavaFX Laden des Inhalts AWT, Swing, JavaFX & SWT 1
L JavaFX Verzögerung beim Laden von Daten AWT, Swing, JavaFX & SWT 6
I Scene Builder kann .fxml nicht mehr laden AWT, Swing, JavaFX & SWT 3
S NullPointer Exception beim Laden von Bildern AWT, Swing, JavaFX & SWT 11
X Java Fxml laden AWT, Swing, JavaFX & SWT 4
G Properties automatisch laden AWT, Swing, JavaFX & SWT 10
D JavaFX Gesetzte Variable in einem Controller im Controller laden AWT, Swing, JavaFX & SWT 1
L Graphik nach 100 ms neu laden AWT, Swing, JavaFX & SWT 1
Z JAVAFX Stage über Controller weitergeben um css-file zu laden AWT, Swing, JavaFX & SWT 4
S JavaFX Fenstergrösse automatisch Speichern und Laden AWT, Swing, JavaFX & SWT 4
M Datenbanksätze in ToolTip laden AWT, Swing, JavaFX & SWT 4
A JPanel Bild laden (Porblem mit Dateipfad) AWT, Swing, JavaFX & SWT 2
I Zufallsbilder laden AWT, Swing, JavaFX & SWT 2
D Swing Bei Button Click neues Panel laden AWT, Swing, JavaFX & SWT 3
C Image laden und Speichern - Image wird auf JPanel nicht angezeigt AWT, Swing, JavaFX & SWT 4
X JFrame erst nach dem Laden sichtbar stellen AWT, Swing, JavaFX & SWT 8
N FXML Dokument laden AWT, Swing, JavaFX & SWT 1
J Bilder auf JPanel (im JScrollPane) nacheinander laden AWT, Swing, JavaFX & SWT 0
B Ressourcen laden beim Ausführen der .jar nicht schnell genug AWT, Swing, JavaFX & SWT 2
V JavaFX - fxml-Datei laden (neben CSS) AWT, Swing, JavaFX & SWT 2
T AWT Bild laden und transparent zeichnen AWT, Swing, JavaFX & SWT 2
J Swing Bild laden, Kreise drin malen, Schreiben AWT, Swing, JavaFX & SWT 2
M Swing Elemente im Dialog neu "laden". AWT, Swing, JavaFX & SWT 6
K JLabel nachträglich laden AWT, Swing, JavaFX & SWT 6
T Modell als XML Speichern / Laden AWT, Swing, JavaFX & SWT 9
B Hintergrund laden AWT, Swing, JavaFX & SWT 3
V Laden einer Bitmap / Eclipse-Problem? AWT, Swing, JavaFX & SWT 4
S Font laden, Wort zeichnen und animieren..? AWT, Swing, JavaFX & SWT 2
G Objekte in und aus einer JTable laden AWT, Swing, JavaFX & SWT 5
H 2D-Grafik Bilder laden ist nicht zuverlässig AWT, Swing, JavaFX & SWT 3
V Persistentes Objekt laden Progressbar AWT, Swing, JavaFX & SWT 7
Luk10 Fragen zum Laden von Fonts AWT, Swing, JavaFX & SWT 4
N Swing BufferedImage neu laden AWT, Swing, JavaFX & SWT 10
C SWT Mehrere Bilder in GUI laden AWT, Swing, JavaFX & SWT 5
T Swing Laden eines Icons auf JButton liefert NullPointerException AWT, Swing, JavaFX & SWT 8
C 2D-Grafik bild aus resource folder laden AWT, Swing, JavaFX & SWT 3
R Image laden sehr langsam AWT, Swing, JavaFX & SWT 7
Luk10 Laden von eingebundenen .png Datein AWT, Swing, JavaFX & SWT 15
S Objekt einmal laden zweimal anzeigen 3d AWT, Swing, JavaFX & SWT 6
C 2D-Grafik BufferedImage laden, Frage zum Code AWT, Swing, JavaFX & SWT 2
P Text-Vorschläge für JTextField aus ner Liste laden AWT, Swing, JavaFX & SWT 8
J Bild aus Datei in BufferedImage laden AWT, Swing, JavaFX & SWT 4
S GUI per XML zur Laufzeit laden AWT, Swing, JavaFX & SWT 5
P 2D-Grafik Fehler beim Laden eines Bildes AWT, Swing, JavaFX & SWT 25
X Bild via FileChooser in paint-Methode laden AWT, Swing, JavaFX & SWT 2
B Problem beim laden von Bild mit getResource() AWT, Swing, JavaFX & SWT 3
L Swing Bilder über andere Bilder laden AWT, Swing, JavaFX & SWT 3
M Bild aus .jar Archiv laden geht nicht AWT, Swing, JavaFX & SWT 6
H Swing HTML in einem JEditorPane zeilenweise hinzufügen ohne Inhalt jedes Mal neu zu laden AWT, Swing, JavaFX & SWT 4
D Swing JTable in Datei speichern und laden AWT, Swing, JavaFX & SWT 3
E Laden von Bilddateien erzeugt OutOfMemory Error AWT, Swing, JavaFX & SWT 6
F Swing Zur Laufzeit Bild laden und auf JPanel anzeigen AWT, Swing, JavaFX & SWT 4
H Applet - Hilfedateien im Browser öffnen / eine Webseite laden AWT, Swing, JavaFX & SWT 6
B ImageIO gif Dateien laden AWT, Swing, JavaFX & SWT 7
S Ordner mit Bildern laden AWT, Swing, JavaFX & SWT 2
E Swing Panel neu laden /neu zeichnen AWT, Swing, JavaFX & SWT 4
S JInternalFrame oder JTextArea neu laden AWT, Swing, JavaFX & SWT 2
O Tabelle laden - Prozessorlast 100% ?? AWT, Swing, JavaFX & SWT 11
N Tablle nach SQL-Update neu Laden AWT, Swing, JavaFX & SWT 4
O Swing JInternalFrame komplett neu laden AWT, Swing, JavaFX & SWT 3
Z JTable neu laden AWT, Swing, JavaFX & SWT 19
R JTable nur sichtbaren Bereich laden AWT, Swing, JavaFX & SWT 12
Dit_ Mit Button "Weiter" neues Panel laden, altes ausblenden... AWT, Swing, JavaFX & SWT 4
SuperSeppel13 Vorschuabilder laden AWT, Swing, JavaFX & SWT 6
H SWT TabItem von Methode "neu laden" AWT, Swing, JavaFX & SWT 3
Developer_X Java BMP-Dateien laden AWT, Swing, JavaFX & SWT 2
C Bild in ein JPanel laden AWT, Swing, JavaFX & SWT 4
W Frame Speichern/laden AWT, Swing, JavaFX & SWT 7
T HTML Seite neu laden mittels Applet AWT, Swing, JavaFX & SWT 2
R Swing JTable, werte speichern und laden AWT, Swing, JavaFX & SWT 25
D Font laden AWT, Swing, JavaFX & SWT 2
C Problem mit Bild neu laden AWT, Swing, JavaFX & SWT 7
S JTappedPane neu laden AWT, Swing, JavaFX & SWT 2
Fadi Images in JAR Datei laden? AWT, Swing, JavaFX & SWT 5
D Event beim Laden eines JPanels? AWT, Swing, JavaFX & SWT 3
S [ANT] jsch jar aus einem anderen Ordner laden AWT, Swing, JavaFX & SWT 7
1 Laden einer Datei zur Echtzeit Darstellen AWT, Swing, JavaFX & SWT 7
A JTable neu laden AWT, Swing, JavaFX & SWT 2
F csv Datein in Tabelle laden AWT, Swing, JavaFX & SWT 2
M html aus einem Stream Laden und Anzeigen AWT, Swing, JavaFX & SWT 4
T Fenster neu laden AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben