有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java readobject方法引发ClassNotFoundException

我正在尝试学习Java,并希望使用Java的客户机/服务器进行测试,以使客户机向服务器发送一个自定义类(消息)的简单对象。问题是我一直在服务器端收到ClassNotFoundException

我认为其余的代码似乎没有问题,因为其他对象(如字符串)可以顺利通过

我在客户机和服务器的不同位置有两个不同的netbeans项目

他们每个人在各自的包下都有自己的消息类副本。 消息类实现了可序列化

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

在服务器端,调用readObject方法时,它似乎是从客户机的包而不是自己的包中查找消息类。printStackTrace在服务器端显示:“java.lang.ClassNotFoundException:client.Message”

我甚至还没有尝试投射或存储收到的对象。有什么我遗漏的吗


共 (2) 个答案

  1. # 1 楼答案

    原因是ObjectInputStream中的readObject()实际上实现为:

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

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

    如果您可以保证相同的包/类名,但并非总是在完全相同的副本时,那么您需要向所讨论的类添加一个具有相同值的serialVersionUID字段

    package shared;
    
    import java.io.Serializable;
    
    public class Message implements Serializable {
        private static final long serialVersionUID = 1L;
    
        // ...
    }