使用 RMI 从服务器向客户端返回一个 Java 向量

Returning a Java Vector from Server to Client using RMI

我是 RMI 的新手,我正在尝试 return 用户定义的向量 class 给客户端。我收到一个解组异常。

Here is my code.

我遇到的异常是:-

java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
            java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: Text
            at sun.rmi.server.UnicastRef.invoke(Unknown Source)
            at HelloServerImplementation_Stub.viewTexts(Unknown Source)
            at HelloClient.main(HelloClient.java:30)
    Caused by: java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: Text
            at java.io.ObjectInputStream.readObject0(Unknown Source)
            at java.io.ObjectInputStream.readArray(Unknown Source)
            at java.io.ObjectInputStream.readObject0(Unknown Source)
            at java.io.ObjectInputStream.defaultReadFields(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 sun.rmi.server.UnicastRef.unmarshalValue(Unknown Source)
            ... 3 more
    Caused by: java.io.NotSerializableException: Text
            at java.io.ObjectOutputStream.writeObject0(Unknown Source)
            at java.io.ObjectOutputStream.writeArray(Unknown Source)
            at java.io.ObjectOutputStream.writeObject0(Unknown Source)
            at java.io.ObjectOutputStream.access0(Unknown Source)
            at java.io.ObjectOutputStream$PutFieldImpl.writeFields(Unknown Source)
            at java.io.ObjectOutputStream.writeFields(Unknown Source)
            at java.util.Vector.writeObject(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.invokeWriteObject(Unknown Source)
            at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
            at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
            at java.io.ObjectOutputStream.writeObject0(Unknown Source)
            at java.io.ObjectOutputStream.writeObject(Unknown Source)
            at sun.rmi.server.UnicastRef.marshalValue(Unknown Source)
            at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
            at sun.rmi.transport.Transport.run(Unknown Source)
            at sun.rmi.transport.Transport.run(Unknown Source)
            at java.security.AccessController.doPrivileged(Native Method)
            at sun.rmi.transport.Transport.serviceCall(Unknown Source)
            at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source)
            at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(Unknown Source)
            at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
            at java.lang.Thread.run(Unknown Source)

异常原因是

Caused by: java.io.NotSerializableException: Text
                at java.io.ObjectOutputStream.writeObject0(Unknown Source)

在您的 Text class 中实施 Serializable 界面。

class Text implements Serializable{

}