2012-01-10 20 views
0

我在運行時遇到下面的異常,每當我試圖在我的項目中運行它。獲取java.io.InvalidClassException

EXCEPTION MESSAGE:Message:java.io.InvalidClassException:com.mypackage.abc.MyClass;局部類不兼容:流classdesc的serialVersionUID = -297991290629036654,本地類的serialVersionUID = -6182496564283649260

有人可以幫我擺脫這個異常掉。這背後的原因是什麼?我該如何解決這個問題?

+0

請張貼一些代碼 – 2012-01-10 09:52:02

+0

查看該異常的文檔。如果您希望程序忽略版本不兼容的事實,則可以將其設置爲它所期望的值,並且不會發生抱怨。 – 2012-01-10 10:05:38

+0

所以,我要添加: private static serialVersionUID = 1L; 希望這會工作:) – 2012-01-10 11:42:03

回答

3

InvalidClassException API文檔說:

當Serialization運行時檢測到一類以下問題之一拋出。

  • 類的串行版本不匹配,從流中讀取類描述符的
  • 類包含未知數據類型
  • 類沒有可訪問的無參數的構造函數

看着錯誤消息,這三個中的第一個就是你的情況。

看起來您正在嘗試加載序列化對象,但與此同時,您已對類com.mypackage.abc.MyClass進行了更改,以便您現在嘗試加載的序列化對象與新版本的類不兼容。

Java的標準序列化機制的一個問題是它將序列化對象與您的源代碼非常接近:如果您更改源代碼(特別是您的com.mypackage.abc.MyClass類),則舊的序列化對象將無法再讀取。

解決此問題的一種方法是回到舊版本的com.mypackage.abc.MyClass,然後編寫一個小工具來加載序列化對象,並以標準的,可擴展的,記錄良好的格式將它們保存回另一個文件中(例如XML)而不是使用Java序列化。

0

您正試圖讀取相應的類定義已更改的序列化對象。

0

從Java文檔:

當Serialization運行時檢測到下列 問題一類一個拋出。

The serial version of the class does not match that of the class descriptor read from the stream 
The class contains unknown datatypes 
The class does not have an accessible no-arg constructor