readobject-Methode löst ClassNotFoundException aus

7

Ich versuche, Java aufzunehmen und möchte mit dem Java-Client / Server testen, damit der Client ein einfaches Objekt einer selbstdefinierten Klasse (Message) an den Server sendet. Das Problem war, dass ich eine ClassNotFoundException auf der Serverseite erhielt.

Ich denke, der Rest der Codes scheint in Ordnung zu sein, weil andere Objekte wie String ohne Probleme durchgehen können.

Ich hatte zwei verschiedene Netbeans-Projekte an verschiedenen Orten für Client und Server.

Jede von ihnen hat ihre eigene Kopie der Nachrichtenklasse unter ihren jeweiligen Paketen. Die Nachrichtenklasse implementiert Serializable.

Auf der Clientseite versuche ich ein Nachrichtenobjekt durch zu senden.

Auf der Serverseite scheint es nach dem Aufruf der readObject-Methode, die Message-Klasse aus dem Paket des Clients zu finden, anstatt es selbst zu besitzen. printStackTrace zeigte auf der Serverseite: "java.lang.ClassNotFoundException: client.Message"

Ich habe noch nicht einmal versucht, das empfangene Objekt zu werfen oder zu speichern. Gibt es etwas, das ich weggelassen habe?

    
eruina 26.05.2010, 19:29
quelle

2 Antworten

16

Der Paketname und der Klassenname müssen auf beiden Seiten gleich genau sein. I.e. schreibe einmal, kompiliere einmal und gebe dann beiden Seiten die gleiche Kopie. Habe keine separaten server.Message und client.Message Klassen, sondern eine einzelne shared.Message Klasse oder etwas ähnliches.

Wenn Sie denselben Paket- / Klassennamen garantieren können, aber nicht immer, wenn genau dieselbe Kopie ist, müssen Sie der Klasse ein serialVersionUID -Feld mit dem gleichen Wert hinzufügen (z ) in Frage.

%Vor%     
BalusC 26.05.2010, 19:33
quelle
4

Der Grund ist, dass das readObject () in ObjectInputStream praktisch wie folgt implementiert ist:

%Vor%     
Daniel 26.05.2010 20:14
quelle