1

突然このエラーが発生します。それは今日まで前に働いていました。Javaが更新されたか何かで、これが機能しなくなったのだろうか。

私が得ているエラー:

java.io.InvalidClassException: javax.swing.JComponent; local class incompatible: stream classdesc serialVersionUID = -1030230214076481435, local class serialVersionUID = -2790168081368361182

これは、次のことを行うと発生します

....
ObjectInputStream open = new ObjectInputStream(openFile);
Object obj =  open.readObject(); <--- dies here

この問題を解決するにはどうすればよいですか。ファイルを再び開くことができるようになりたいです。

ありがとう。

4

3 に答える 3

3

openFileこれは、現在実行しているバージョンとは異なるjdk/jreバージョンでファイルを作成したためです。したがって、JComponentクラスのserialVersionidは異なります。

以前のjreでアプリケーションを実行してみてください(古いか新しいかはわかりません)。

于 2012-09-28T04:35:29.933 に答える
2

はい。Java のバージョンを切り替えたと思われます。JComponentの javadoc には次のように記載されていることに注意してください。

「警告: このクラスのシリアライズされたオブジェクトは、将来の Swing リリースと互換性がありません。現在のシリアライゼーション サポートは、同じバージョンの Swing を実行しているアプリケーション間の短期保存または RMI に適しています。1.4 の時点で、すべての JavaBeans の長期保存がサポートされています。が java.beans パッケージに追加されました。XMLEncoder を参照してください。


この問題を解決するにはどうすればよいですか。ファイルを再び開くことができるようになりたいです。

以前使用していた JRE / JDK に戻す以外にできることはあまりありません。長期的な解決策は、別の方法で状態を保存するようにアプリケーションを再設計することです。

于 2012-09-28T04:50:15.077 に答える
0

clsas serialVersionUID-2790168081368361182-1030230214076481435に変更して、試してみてください。

于 2012-09-28T04:26:39.343 に答える