Vector Objekt in Datei speichern / lesen

kjk

Grünschnabel
Hallo,

Ich versuche einen Vector der mit Objekten meiner Klasse gefüllt ist in eine Datei zu speichern und Ihn dann wieder zu lesen.
Dann Ihn als Vector Objekt wieder weiter zu nutzen.
Warum ? ich möchte meine Dynamisch erzeugten Swing Frames, (die im Vector gespeichert wurden) und die Positions daten und diverse Variablen besitzen abspeichern.
und beim nächsten PRG Start wieder einlesen. um so die umgebung wieder herzustellen.

mein cöde:

erzeugen der frames:
Vector lupen = new Vector();
...
public void Button_neuer_frame_actionPerformed(ActionEvent actionEvent) {
lupen.add(new lupe());//der neue frame
for (int i = 0; i < lupen.size(); i++) {
current_lupe = (lupe) lupen.lastElement();
current_lupe.set_name("Lupe " + i);
current_lupe.setLocation(10, 10);
current_lupe.setVisible(true);
}
save_env();
}

......................
public void save_env(){
try {

ostream = new FileOutputStream("meinfile");
output = new ObjectOutputStream(ostream);
output.writeObject(lupen);
output.flush();

}
........

beim start des prg wird das file gelesen:

public void load_env(){
try {
istream = new FileInputStream("meinfile");
input = new ObjectInputStream(istream);
System.out.println("The data file is loaded!");
Vector lupen = ((Vector) input.readObject());
}
catch (FileNotFoundException ex) {
System.out.println(ex.getMessage());
}
catch (IOException ex) {
System.out.println("hier schmiert er ab: " + ex.getMessage());
}
.....

die fehlermeldung:
writing aborted; java.io.NotSerializableException: java.io.ObjectInputStream
und der Vector wird nicht gelesen.
PS. im file steht jede menge drinn ! und wird auch immer schön geschrieben.

eventuell kann mir ja jemand weiterhelfen ider einen anderen weg zeigen,
danke
kai
 
Vielleicht erklärst du mal kurz den Sinn uind Zweck deiner actionPerformed Methode, ich verstehe Sie nicht so ganz.
Also ein Button wird gedrückt, dann wird ein neues Frame erstellt und dem Vector hinzugefügt, dann durchläufst du eine Schleife die immer wider nur auf das gleiche Objekt(das letzte Element) zugreift und änderst dessen Namen ständig...
Das kann doch nicht so wirklich das sein was du erreichen möchtest...
 
Hallo!

Implementieren die Objekte die du Serialisieren willst auch das Serializable Marker Interface und sind auch die Felder dieser Objekte serialisierbar?

Gruß Tom
 
Hallo,

danke für die Nachfragen,
hab gefunden warum es nicht ging.

Elmato
wenn du dir die funktion ansiehst die im button liegt wirst du feststellen das jedesmal wenn man den button drückt eine neue instanz in den vector geadded wird und das am ende des vectors.

Thomas,
hatte alle klassen mit Serializable ausgestattet, aber.
ich hatte im konstruktor des windows das ich erstelle die main klasse referenziert.
das ging nicht ?

public lupe(main main) {
this.addWindowListener(new MyWindowListener());
this.my_main = main;
......

habe jetzt transient eingebastelt jetzt gehts , habe nicht nachgeforscht warum es nicht ging , irgendwas war wol in der main nicht Serializable .

als member Var habe ich nun:
transient main my_main;
so wird die Variable nicht mit Serializable und es klappt.

jetzt wird der komplette Vector mit allen offenen Windows und ihren einstellungen
gespeichert, cool :)

mfg
kai
 
Hallo,

danke für die Nachfragen,
hab gefunden warum es nicht ging.

Elmato
wenn du dir die funktion ansiehst die im button liegt wirst du feststellen das jedesmal wenn man den button drückt eine neue instanz in den vector geadded wird und das am ende des vectors.

kai

Das ist mir schon klar, was ich nur nicht so ganz Verstanden habe ist warum du in der Schleife immer nur auf das gleiche Element zugreifst und dessen namen änderst... Die neue Instanz des Frames wird ja ausserhalb der Schleife erstellt, verstehst du was ich meine? Oder geht mal wieder was an mir vorbei? :D
 
Das ist mir schon klar, was ich nur nicht so ganz Verstanden habe ist warum du in der Schleife immer nur auf das gleiche Element zugreifst und dessen namen änderst... Die neue Instanz des Frames wird ja ausserhalb der Schleife erstellt, verstehst du was ich meine? Oder geht mal wieder was an mir vorbei? :D

hast schon recht die schleife ist noch von tests usw.
ist überflüssig , hab ich noch nicht geändert.


kai
 
Zurück