使用ObjectInputStream的Java奇怪的运行时错误

时间:2012-09-28 04:22:58

标签: java deserialization runtime-error

我突然得到这个错误。它一直工作到今天。我想知道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

我应该尝试解决此问题。我希望能够再次打开我的文件。

感谢。

3 个答案:

答案 0 :(得分:3)

这是因为您在jdk / jre版本中创建的文件openFile与您现在运行的版本不同。所以JComponent类'serialVersionid是不同的。

尝试使用之前的jre运行你的应用程序(不能说它是旧的还是新的)。

答案 1 :(得分:2)

是。我怀疑你已经切换了Java的版本。请注意,javadoc for JComponent说明了这一点:

  

“警告:此类的序列化对象与以后的Swing版本不兼容。当前的序列化支持适用于运行相同版本Swing的应用程序之间的短期存储或RMI。从1.4开始,支持所有JavaBeans的长期存储已添加到java.beans包中。请参阅XMLEncoder。“


  

我应该尝试解决此问题。我希望能够再次打开我的文件。

除了切换回之前使用的JRE / JDK之外,你没有什么可以做的。长期解决方案是重新设计您的应用程序,以便以其他方式存储状态。

答案 2 :(得分:0)

将您的班级serialVersionUID -2790168081368361182更改为-1030230214076481435,并尝试一下。