簡體   English   中英

通過套接字接收序列化對象時獲取ClassNotFoundException

[英]Getting ClassNotFoundException when receiving serialized object over socket

首先,我正在使用的對象(Book)應該沒問題:

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<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.
    }

同樣,這兩個程序中的書是相同的,並且在同一包中。

將跟蹤點堆棧到我的注釋文本,但以防萬一,這里是:

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)

該類必須存在於接收者的CLASSPATH上。 序列化並不能為您做到這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM