0

私のクライアントアプリケーションで渡されたオブジェクトを、自分のサーバーアプリケーション内の同じクラスのオブジェクトにキャストしようとしています。ClassNotFoundException in ObjectInputStream.readObject()

私は現在、私のサーバーアプリケーションに受けてるエラーは次のとおりです。

mei 02, 2012 11:44:43 PM server.UserThread process 
SEVERE: null 
java.lang.ClassNotFoundException: client.User 

オブジェクトはソケットを介してサーバによって受信されている - >のObjectInputStream。

私は、皆さんが私のServer.Userクラスにclient.Userクラスをキャストするのを手伝ってくれるのだろうかと思っていました。唯一効果的なのは、パッケージを1つのプロジェクトの中に配置し、クラスの正確な場所を定義することです。

コードはいつでも入力できます。

+1

"ClassNotFoundException"は、サーバーがクライアントで使用されているのと同じクラスファイルにアクセスできないことを示しています。あなたはクラスローダーで面白いことをしていますか? –

+1

2つの同一のクラスを作成しましたか?**同じ**クラスを使用していますか?後で使用する必要があります。 – twain249

+0

いくつかのコードを表示すると役立つ可能性があります。 –

答えて

1

はできませんので、私のServer.Userクラスに

をclient.Userクラスをキャスト。彼らは同じクラスではありません。彼らは別のパッケージに入っています。それらは違う。サーバーとクライアントの間でクラスを共有する場合は、単一の.classファイルを共有する必要があります。それは共有物のための3番目のパッケージを作成することを意味するかもしれません。

+0

私は完璧な解決策を見つけた試行錯誤のビットの後にありがとう。 これは多くの助けとなりました。 – Orion

+0

*あなた*が見つかりましたか? *私は提供しました。 – EJP

0

いくつかのユーザーがあなたの質問に答えて提案するように、クラスは同じである必要があります。デフォルトのシリアライゼーションプロクシを使用してオブジェクトを平坦化して膨らませるのは良い選択ではありません。 Externalizableインターフェイスを使用する場合は、Serializableの代わりに writeExternalとreadExternalを使用してシリアル化プロシージャをカスタマイズできます。

オブジェクトをサーバーからクライアントに送信しようとしている場合は、オブジェクトストリームの使用をお勧めします。これを行うにはProtobuffを提案してもよろしいですか?

Protobuff:

プロトコルバッファは、効率的な、まだ拡張可能な形式で構造化されたデータを符号化する方法です。 Googleは、ほとんどすべての内部RPCプロトコルとファイル形式に対してプロトコルバッファを使用しています。