метод readobject бросает ClassNotFoundException

Я пытаюсь взять Java и хотел протестировать вокруг с клиентом/сервером Java, чтобы заставить клиент отправить простой объект сам определенный класс (сообщение) к серверу. Проблема состояла в том, что я продолжал получать ClassNotFoundException на стороне сервера.

Я думаю, что остальная часть кодов, кажется, в порядке, потому что другие объекты, такие как Строка могут пройти без проблем.

У меня было два различных netbeans проекта в различных местоположениях для клиента и сервера каждый.

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

На стороне клиента я пытаюсь отправить Объект сообщения через.

На стороне сервера, по вызову readObject метода, это, кажется, находит Класс сообщений от пакета клиента вместо своего собственного. printStackTrace показал: "java.lang. ClassNotFoundException: клиент. Сообщение" на стороне сервера

Я даже не попытался бросить или хранить объект, полученный все же. Есть ли что-то, что я не учел?

8
задан eruina 26 May 2010 в 19:29
поделиться

2 ответа

Имя пакета и имя класса должны быть абсолютно одинаковыми с обеих сторон. То есть, напишите один раз, скомпилируйте один раз, а затем дайте обеим сторонам одинаковую копию. Не надо иметь отдельные классы server.Message и client.Message, а один класс shared.Message или что-то подобное.

Если вы можете гарантировать одинаковое имя пакета/класса, но не всегда, когда это точно та же копия, тогда вам нужно добавить поле serialVersionUID с тем же значением к рассматриваемому классу(ам).

package shared;

import java.io.Serializable;

public class Message implements Serializable {
    private static final long serialVersionUID = 1L;

    // ...
}
18
ответ дан 5 December 2019 в 07:33
поделиться

Причина в том, что readObject () в ObjectInputStream практически реализован как:

 String s = readClassName();
 Class c = Class.forName(s); // Here your code breaks
 Object o = c.newInstance();
 ...populate o...
4
ответ дан 5 December 2019 в 07:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: