Hallo,
zwar bin ich kein totaler Anfänger, aber da das Problem recht grundlegend ist, wollt ich es hier versuchen. Suche habe ich bemüht, aber nichts gefunden.
Zur vereinfachten Beschreibung (Quelltexte vereinfacht):
Ich habe ein Objekt einer Klasse, mit zwei verschiedenen Attributen:
Füll ich fein mit Daten und speicher es einfach von der Klasse aus ab, die das Objekt benutzt:
In einem anderen Programm öffne ich den Datensatz wieder mit:
Ganz einfach also. 2 kleine Progrämmchen, eins speichert, eins lädt (und beide machen natürlich noch viele andere Dinge
)
Es läuft auch korrekt, SOLANGE ich damit auf dem selben Rechner bleibe.
Sprich:
- Ich bin auf Rechner A
- speichere dort in Programm 1
- lade dort in Programm 2
--> alles wunderbar, ich kann das Objekt mit allen Inhalten sauber auslesen. Auf Rechner B ganz genauso
- Bin ich auf Rechner A und speichere mit Programm 1
- zieh mir die Datei auf einen anderen Rechner
- Lade sie auf Rechner B mit Programm 2
--> kann nicht geöffnet werden. Also wird gefunden, klar, aber kann dem Objekttyp nicht zugeordnet werden.
Hinzu kommt, dass (obwohl das ja vielleicht nicht unbedingt was heißen muss), wenn man das gespeicherte Objekt einfach mal mit dem Editor anschaut, es völlig unterschiedlich aussieht auf beiden Rechnern. Auf einem werden scheinbar Asci-Zeichen gelesen und ich sehe die Inhalte der String-Vektoren, bei dem anderen ist alles kryptisch.
Ich hab grad den anderen Rechner nicht hier, deshalb weiß ich nicht ganz exakt welche Java-Version da drauf ist. Aber auf jeden Fall ist auf beiden eine JDK 6.x drauf. Auf beiden Rechnern läuft das identische Programm 1 und 2.
Meine einzig sinnvolle Überlegung war bisher, dass es an verschiedenen Java-Versionen liegen könnte. Aber es wär doch etwas krass, wenn da innerhalb der 6er-Version etwas derart Grundlegendes geändert worden wäre, oder? Würde ja bedeuten, dass mit ner neuen Unterversion plötzlich alle einfach serialisiert gespeicherten Objekte anders geschrieben werden. Aber mir will einfach nicht in den Kopf gehen, wo sonst der Unterschied liegen soll, wenn sonst beide Programme identisch sind. Auf beiden Rechnern läuft auch XP (1x Home, 1x Prof. glaub ich).
Ich hoffe mir kann irgendjemand einen Hinweis geben. Wie gesagt: Auf einem Rechner läuft alles bestens und ich kann mit den Objekten rumspielen wie ich will.
zwar bin ich kein totaler Anfänger, aber da das Problem recht grundlegend ist, wollt ich es hier versuchen. Suche habe ich bemüht, aber nichts gefunden.
Zur vereinfachten Beschreibung (Quelltexte vereinfacht):
Ich habe ein Objekt einer Klasse, mit zwei verschiedenen Attributen:
Java:
public class Beispiel implements Serializable{
private Vector<String> wochentag= new Vector<String>(),
ort = new Vector<String>(),
person = new Vector<String>();
private ImageIcon einBild = null;
...
}
Füll ich fein mit Daten und speicher es einfach von der Klasse aus ab, die das Objekt benutzt:
Java:
Beispiel einBeispiel = new Beispiel(); //gehen wir mal davon aus, dass Daten drin sind
public void safe(){
dt = new Date();
String datestamp = dt.toString();
datestamp = "..\\saves\\save-" + datestamp.substring(8, 10)+datestamp.substring(4, 7)+datestamp.substring(11, 13)+datestamp.substring(14, 16)+datestamp.substring(17, 19) + ".fun";
file = new File(datestamp);
try {
ObjectOutputStream os = new ObjectOutputStream(
new FileOutputStream(file));
os.writeObject(einBeispiel);
os.close();
}
catch (FileNotFoundException e1) {
e1.printStackTrace();
}
catch (IOException e1) {
e1.printStackTrace();
}
message.setText("Datei gespeichert unter: " + datestamp);
}
In einem anderen Programm öffne ich den Datensatz wieder mit:
Java:
public void load(){
ObjectInputStream is;
try {
is = new ObjectInputStream(new FileInputStream(file));
eineDatei = (Beispiel) is.readObject();
is.close();
}
catch (FileNotFoundException e1) {
e1.printStackTrace();
}
catch (IOException e1) {
e1.printStackTrace();
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
Ganz einfach also. 2 kleine Progrämmchen, eins speichert, eins lädt (und beide machen natürlich noch viele andere Dinge
Es läuft auch korrekt, SOLANGE ich damit auf dem selben Rechner bleibe.
Sprich:
- Ich bin auf Rechner A
- speichere dort in Programm 1
- lade dort in Programm 2
--> alles wunderbar, ich kann das Objekt mit allen Inhalten sauber auslesen. Auf Rechner B ganz genauso
- Bin ich auf Rechner A und speichere mit Programm 1
- zieh mir die Datei auf einen anderen Rechner
- Lade sie auf Rechner B mit Programm 2
--> kann nicht geöffnet werden. Also wird gefunden, klar, aber kann dem Objekttyp nicht zugeordnet werden.
Hinzu kommt, dass (obwohl das ja vielleicht nicht unbedingt was heißen muss), wenn man das gespeicherte Objekt einfach mal mit dem Editor anschaut, es völlig unterschiedlich aussieht auf beiden Rechnern. Auf einem werden scheinbar Asci-Zeichen gelesen und ich sehe die Inhalte der String-Vektoren, bei dem anderen ist alles kryptisch.
Ich hab grad den anderen Rechner nicht hier, deshalb weiß ich nicht ganz exakt welche Java-Version da drauf ist. Aber auf jeden Fall ist auf beiden eine JDK 6.x drauf. Auf beiden Rechnern läuft das identische Programm 1 und 2.
Meine einzig sinnvolle Überlegung war bisher, dass es an verschiedenen Java-Versionen liegen könnte. Aber es wär doch etwas krass, wenn da innerhalb der 6er-Version etwas derart Grundlegendes geändert worden wäre, oder? Würde ja bedeuten, dass mit ner neuen Unterversion plötzlich alle einfach serialisiert gespeicherten Objekte anders geschrieben werden. Aber mir will einfach nicht in den Kopf gehen, wo sonst der Unterschied liegen soll, wenn sonst beide Programme identisch sind. Auf beiden Rechnern läuft auch XP (1x Home, 1x Prof. glaub ich).
Ich hoffe mir kann irgendjemand einen Hinweis geben. Wie gesagt: Auf einem Rechner läuft alles bestens und ich kann mit den Objekten rumspielen wie ich will.