2016-08-19 11 views
-1

У меня есть проект сервера, в котором мне нужно отправить объект через сервер с одного компьютера на другой. Объектом является SpecificGame, который расширяет Game. Сервер знает, что полученный объект имеет тип Game, но не имеет доступа к SpecificGame или к любому другому классу, который расширяет Game. Затем сервер передаст этот объект на другой компьютер, и все будет в порядке.Java ClassNotFoundException для подкласса существующего класса

У меня есть несколько классов, которые расширяют Game (несколько компьютерных игр, в которых я работаю над использованием этого сервера), и я постоянно изменяю и добавляю эти классы без изменения самой игры.

В последнее время сервер бросает ClassNotFoundException для SpecificGame, хотя SpecificGame расширяет Game, который распознает сервер. Если я экспортирую сервер в виде jar из той же папки проекта, что и SpecificGame в eclipse, он отлично работает, но это означает, что я должен экспортировать банку и перезапускать сервер каждый раз, когда я изменяю все, что расширяет Game и проходит через сервер.

Я использую метод ObjectInputStream.readObject() для чтения в классе, который расширяет игру, и это порождает исключение.

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

К сожалению, я не могу опубликовать код в Интернете.

Спасибо!

+0

Как вы производите SpecificGame после прочтения? '(Game) ObjectInputStream.readObject()' или '(SpecificGame) ObjectInputStream.readObject()'? – corpico

+0

Я использовал (игру), чтобы использовать любой класс, в том числе SpecificGame, который расширяет игру с сервера – Waiwera

ответ

0

Когда вы добавляете новый класс в один конец сообщения, вам, конечно же, необходимо добавить тот же класс и на другой конец. И это означает, что вам придется перераспределить эти классы на сервер и перезапустить его.

В противном случае, как и в случае, сервер получает информацию для восстановления объекта SpecificGame из некоторой сериализованной информации, но как он должен это делать, не зная, что такое SpecificGame?