Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过套接字接收序列化对象时获取ClassNotFoundException_Java_Sockets_Ipc_Classnotfoundexception - Fatal编程技术网

Java 通过套接字接收序列化对象时获取ClassNotFoundException

Java 通过套接字接收序列化对象时获取ClassNotFoundException,java,sockets,ipc,classnotfoundexception,Java,Sockets,Ipc,Classnotfoundexception,首先,我使用的对象(书)应该是好的: public class Book implements Serializable { private static final long serialVersionUID = 1L; private String name; private String publisher; private int numbOfPages; private int id; 服务器和客户端都有它(复制粘贴,

首先,我使用的对象(书)应该是好的:

public class Book implements Serializable  {

    private static final long serialVersionUID = 1L;

    private String  name;
    private String  publisher;
    private int     numbOfPages;
    private int     id;
服务器和客户端都有它(复制粘贴,无需进一步修改)。所以这绝对不是它

服务器:

ArrayList<Book> library = this.sql_db.getAllBooks();
    try {
        ObjectOutputStream objOut = new ObjectOutputStream(
                this.client.getOutputStream());
        objOut.writeObject(library);
        objOut.flush();
    }
ArrayList library=this.sql_db.getAllBooks();
试一试{
ObjectOutputStream objOut=新的ObjectOutputStream(
this.client.getOutputStream());
对象写入对象(库);
对象刷新();
}
客户:

ArrayList<Book> library = new ArrayList<Book>();

    try {
        ObjectInputStream objIn = new ObjectInputStream(Client.socket.getInputStream());
        //library = (ArrayList<Book>) objIn.readObject(); // This is where the stack trace is pointing to
        Object o = objIn.readObject(); // well actually here, since I commented last line and added this.
    }
ArrayList库=新建ArrayList();
试一试{
ObjectInputStream objIn=新的ObjectInputStream(Client.socket.getInputStream());
//library=(ArrayList)objIn.readObject();//这是堆栈跟踪指向的位置
Object o=objIn.readObject();//实际上在这里,因为我对最后一行进行了注释并添加了这个。
}
同样,这本书在两个程序中都是相同的,并且在同一个包中

堆栈跟踪指向我的注释文本,但为了以防万一,这里是:

java.lang.ClassNotFoundException: db.Book
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at java.io.ObjectInputStream.resolveClass(Unknown Source)
at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
at java.io.ObjectInputStream.readClassDesc(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at java.util.ArrayList.readObject(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at java.io.ObjectStreamClass.invokeReadObject(Unknown Source)
at java.io.ObjectInputStream.readSerialData(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at client.Client.requestAllBooks(Client.java:39)
at handler.HandleUserRequest.<init>(HandleUserRequest.java:19)
at run.Main.main(Main.java:8)
java.lang.ClassNotFoundException:db.Book
位于java.net.URLClassLoader$1.run(未知源)
位于java.net.URLClassLoader$1.run(未知源)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.net.URLClassLoader.findClass(未知源)
位于java.lang.ClassLoader.loadClass(未知源)
位于sun.misc.Launcher$AppClassLoader.loadClass(未知源)
位于java.lang.ClassLoader.loadClass(未知源)
位于java.lang.Class.forName0(本机方法)
位于java.lang.Class.forName(未知源)
位于java.io.ObjectInputStream.resolveClass(未知源)
位于java.io.ObjectInputStream.readNonProxyDesc(未知源)
位于java.io.ObjectInputStream.readClassDesc(未知源)
位于java.io.ObjectInputStream.ReadOrderinaryObject(未知源)
位于java.io.ObjectInputStream.readObject0(未知源)
位于java.io.ObjectInputStream.readObject(未知源)
位于java.util.ArrayList.readObject(未知源)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(未知源)
在sun.reflect.DelegatingMethodAccessorImpl.invoke处(未知源)
位于java.lang.reflect.Method.invoke(未知源)
位于java.io.ObjectStreamClass.invokeReadObject(未知源)
位于java.io.ObjectInputStream.readSerialData(未知源)
位于java.io.ObjectInputStream.ReadOrderinaryObject(未知源)
位于java.io.ObjectInputStream.readObject0(未知源)
位于java.io.ObjectInputStream.readObject(未知源)
位于client.client.requestAllBooks(client.java:39)
HandleUserRequest.(HandleUserRequest.java:19)
在run.Main.Main(Main.java:8)

该类必须存在于接收方的类路径上。序列化并不适合您。

客户端
类中第39行的内容就像我说的,我的注释行。对象o(在此之前,数组列表“library”)在客户端类路径中的
db.Book.class
也是这样吗?