java - 重构序列化对象Eclipse后的ClassNotFoundException

标签 java classnotfoundexception serializable

我有一个可序列化的类 (CardGame),我正在 Eclipse 中使用它,并且最初将其放入包 (x.cardlib) 中。我使用 Eclipse 的重构实用程序将包重命名为 y.cards.models(现在我知道如何正确命名包了)。

我编写了一个新类 (CardGameDatabase),用于从数据库下载并转换序列化的 CardGames,并随后为其编写了一个新的 JUnit 测试用例 (CardGameDatabaseTest)。我尝试运行我的测试用例,并收到以下错误:

java.lang.ClassNotFoundException: x.cardlib.CardGame
at y.cards.database.CardGameDatabase.getGame(CardGameDatabase.java:28)
at y.tests.CardGameDatabaseTest.test(CardGameDatabaseTest.java:13)

我认为我的代码中仍然必须引用旧包,因此我在项目范围内搜索了对旧包的所有引用(例如“import x.cardlib.CardGame”)。我没有找到。

然后我删除了所有已编译的代码并运行 Eclipse 的清理实用程序,认为以前编译的代码中可能存在旧引用。我仍然收到错误。

(嗯,事实上,我在写作时就发现了这一点。我会尽快发布答案,以防其他人遇到这样的问题。)

最佳答案

答案:在重构代码之前,我已将 CardGame 存储在数据库中。从数据库下载对象后,它在数据库中仍然被称为 x.cardlib.CardGame。简而言之,重命名包破坏了我的序列化,导致 ClassNotFoundException。

关于java - 重构序列化对象Eclipse后的ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9577964/

相关文章:

android - 如何在 Android 中将自定义对象写入文件

java - 什么时候 Java 对象可序列化但不可克隆才有意义?

java - 当通过单例模式创建可序列化对象时会发生什么?

java - 如何在 Android 中的闹钟应用程序中设置闹钟铃声

java - 给定一个格式化的日期时间范围,分割并打印该范围之外的每个小时

java - 使用 Java 和 CQLSSTableWriter 将大行数据加载到 Cassandra 中

java - URLClassLoader ClassNotFoundException 异常

Grails在jar中找不到类

java - Spring 和 Thymeleaf session 属性

java - ClassNotFoundException:org.dom4j.DocumentException