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 回答