Вопрос

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

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

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

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

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

На стороне сервера при вызове метода ReadObject, кажется, что класс сообщений из пакета клиента вместо его собственного. PrintStacktrace показал: «Java.lang.classnotfoundexception: client.message» на стороне сервера

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

Это было полезно?

Решение

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

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

package shared;

import java.io.Serializable;

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

    // ...
}

Другие советы

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

 String s = readClassName();
 Class c = Class.forName(s); // Here your code breaks
 Object o = c.newInstance();
 ...populate o...
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top