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
也是这样吗?