Serialisiertes File kann auf anderem Rechner nicht geladen werden

Thallius

Top Contributor
Hi,

obwohl ich jetzt zigmal kontrolliert habe, dass ich bei jedem serialisierten Object eine UID von 1L angegeben habe, bekomme ich beim Versuch eine Datei einzuladen, welche auf einem anderen Rechner gespeichert wurde, den Error:

javax.swing.JComponent; local class incompatible: stream classdesc serialVersionUID = -2790168081368361182, local class serialVersionUID = -5074484439485650315

Woran liegt das?

Gruß

Claus
 
Welche Objekte hast du denn serialisiert?
Könnten möglicherweise Membervariablen, die Objekte aus Libraries sind, diesen Fehler verursachen?
 
Eigentlich nicht. Alle gespeicherten Objekte sind selfmade.

Das einzige was natürlich drin ist sind ArrayLists. Können die das machen?
 
Zuletzt bearbeitet:
Also du hast ein Programm geschrieben und welches dir Objekte serialisiert.

Auf Rechner A führst du es aus und bekommst Files mit den serialisierten Objekten.
Die Dateien werden auf Rechner B kopiert und sollen dort über das selbe Programm wieder deserialisiert werden.

Auf beiden Rechner liegt das richtige Programm (bezüglich der UID)?
Hast du auch schon probiert statt der Default UID "1L" eine automatisch generierte zu verwenden?
 
Muss das sein?

DAs würde ja das serialisieren ad absurdum führen wenn ich eine Datei plötzlich nicht mehr lesen könnte (auch auf dem gleichen Rechner) wenn ich ein Java Update gemacht habe
 
Wenn du eine Klasse vom Interface Serializable ableitest bietet mir Eclipse die Möglichkeit eine Default UID oder eine Generated UID einzutragen.

Bei der Default bekomme ich folgendes:
private static final long serialVersionUID = 1L;
Bei der Generated bekomme ich folgendes:
private static final long serialVersionUID = -5428767991897757734L;

Der Wert der generierten UID wird von den Attributen beeinflusst. Sprich fügst du ein neues Attribut hinzu und lässt die UID neugenerieren ändert sich deren Wert.
Dadurch wird sichergestellt das wirklich nur gleiche Objekte serialisiert/deserialisiert werden.
 
Naja da ja anscheinend ein Object kein 1L als UID hat, muss wohl doch ein Object dabei sein, dass ich nicht selber erstellt habe und das dann unterschiedlich ist. Jetzt müßte man herausfinden welches das ist...
 
Anscheinend serialisierst du durch eine Referenz ein javax.swing.JComponent Objekt.
Dessen serialversionuid hat sich aber anscheinend zwischen verschiedenen JVM Versionen geändert.
Entweder du entfernst die Serialisierung dieses Objekts oder du sorgst dafür, dass beide Rechner die gleiche Java Version haben.
 
Argl lesen bildet. 1000x drauf gesehen aber das javax.swing.JComponent jedesmal überlesen.

Nun suche ich mal wo da ein JComponent drin ist. Sollte es eigentlich nicht.

Danke

Claus
 
kannst du es beim Serialisieren nicht einfach per transient ausschließen ?

insofern du es dann gefunden hast :lol:
 
Zuletzt bearbeitet:
Ja ich habe es gefunden. Dummerweise habe ich ein object von JTextField abgeleitet. Also nichts mit transient. Aber ich werde das object ändern, so dass es kein JTextField mehr ist. Ist halt nur ein wenig mehr Arbeit.

Gruss

Claus
 
Zuletzt bearbeitet:

Zurück
Oben