的readObject方法抛出ClassNotFoundException异常的readObject

2019-05-12 04:57发布

我试图拿起Java和想测试不同的Java的客户机/服务器,使客户端通过向服务器发送一个自定义的类(消息)的简单对象。 问题是,我一直得到服务器端的一个ClassNotFoundException。

我认为代码的其余部分似乎没关系,因为其他对象如String可以顺利通过没有问题。

我在客户端和服务器的每个不同位置的两个不同的NetBeans项目。

他们每个人都有各自的包装下自己Message类的副本。 消息类实现Serializable。

在客户端,我试图通过发送消息对象。

在服务器端,在调用的readObject方法,它似乎是从客户端的包,而不是它自己寻找消息类。 的printStackTrace表明:“抛出java.lang.ClassNotFoundException:client.Message”在服务器端

我还没有尝试过,甚至投或存储尚未收到的对象。 是不是有什么我离开了?

Answer 1:

包名和类名必须是在双方完全一样。 即一次编写,编译一次,然后给双方同一个副本。 没有单独的server.Messageclient.Message类,但一个shared.Message类或类似的东西。

如果你能保证同一个包/类名,但并非总是如此,只要它是完全一样的副本,那么你需要添加serialVersionUID字段相同的值有问题的类(ES)。

package shared;

import java.io.Serializable;

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

    // ...
}


Answer 2:

其原因是,在ObjectInputStream中利用readObject()实际上是为实现:

 String s = readClassName();
 Class c = Class.forName(s); // Here your code breaks
 Object o = c.newInstance();
 ...populate o...


文章来源: readobject method throws ClassNotFoundException