重构序列化对象Eclipse后的ClassNotFoundException

时间:2012-03-06 04:37:38

标签: 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的清理实用程序,认为在以前编译的代码中可能存在旧的引用。我仍然收到错误。

(嗯,事实上,我在写作时想出来了。如果其他人遇到这样的问题,我会尽快发布答案。)

1 个答案:

答案 0 :(得分:1)

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