我试图拿起Java和想测试不同的Java的客户机/服务器,使客户端通过向服务器发送一个自定义的类(消息)的简单对象。 问题是,我一直得到服务器端的一个ClassNotFoundException。
我认为代码的其余部分似乎没关系,因为其他对象如String可以顺利通过没有问题。
我在客户端和服务器的每个不同位置的两个不同的NetBeans项目。
他们每个人都有各自的包装下自己Message类的副本。 消息类实现Serializable。
在客户端,我试图通过发送消息对象。
在服务器端,在调用的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;
// ...
}
其原因是,在ObjectInputStream中利用readObject()实际上是为实现:
String s = readClassName();
Class c = Class.forName(s); // Here your code breaks
Object o = c.newInstance();
...populate o...