2012-03-06 3 views
1

У меня есть сериализуемый класс (CardGame), с которым я работаю в Eclipse, и изначально его поместил в пакет (x.cardlib). Я переименовал пакет в y.cards.models, используя утилиту рефакторинга Eclipse (теперь, когда я знаю, как правильно назвать пакет).ClassNotFoundException после реорганизации сериализованного объекта Eclipse

Я написал новый класс (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

** Ответ **: Я сохранил CardGame в своей базе данных * до того, как * я реорганизовал свой код. После загрузки объекта из базы данных он все еще назывался x.cardlib.CardGame в базе данных. Короче говоря, переименование пакета прервало мою сериализацию, что привело к исключению ClassNotFoundException. –

+0

Пожалуйста, добавьте это как реальный ответ на свой вопрос и примите его. В противном случае окажется, что этот вопрос остается без ответа. –

+0

Видимо, я не могу еще 7 часов с тех пор, как моя репутация недостаточно высока. (Не знаю об этом ограничении перед публикацией) –

ответ

1

Ответ: я хранится CardGame в моя база данных, прежде чем я реорганизовал свой код. После загрузки объекта из базы данных он все еще назывался x.cardlib.CardGame в базе данных. Короче говоря, переименование пакета нарушило мою сериализацию, что привело к исключению ClassNotFoundException.