我有一个可序列化的类 (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/