客户端的Message类
package com.client.comm;import java.io.Serializable;
import java.net.Socket;
import java.util.ArrayList;public class Message implements Serializable {

private ArrayList list;
//get和set方法
          ..........
}服务器端的Message类
package com.server.comm;import java.io.Serializable;
import java.net.Socket;
import java.util.ArrayList;public class Message implements Serializable {

private ArrayList list;
        //get和set方法
.................
}
客户端代码(下面这段代码出错)
public class ClientThread implements Runnable { // 定义主机地址
String host = "127.0.0.1";
// 定义端口号
int port = 2160; Socket socket;
ObjectInputStream in;
ObjectOutputStream out;
ClientThread(Socket socket){
this.socket=socket;
try {
out = new ObjectOutputStream(socket.getOutputStream());
in = new ObjectInputStream(socket.getInputStream());

} catch (Exception e) {
e.printStackTrace();
}
}     public void run() {
Message message = new Message();
while (true) { if (socket.isClosed()) {
break;
}
try {
message = (Message) in.readObject();

} catch (Exception e) {
e.printStackTrace();
}
          }}
java.lang.ClassCastException: com.server.comm.Message cannot be cast to com.client.comm.Message
at com.client.model.ClientThread.run(ClientThread.java:48)
at java.lang.Thread.run(Thread.java:619)

解决方案 »

  1.   


    package ClassSerializable;public class TestCast {
    public static void main(String args[]){
    ClassSerializable.a.Message m1 = new ClassSerializable.a.Message();
    ClassSerializable.b.Message m2 =(ClassSerializable.b.Message)m1;//报错
    }
    }你的情况就相当于这种情况,两个一样的实体,属性都一模一样,但是他们是两个不同的类,怎么区分类是通过包的路径和类名确定唯一性。所以为什么同一包下,不能有两个重名的外部类类名。而对象传输封装了类的基本信息,至少存在确定该类唯一性的信息。
      

  2.   

    把Message放在同一个包下面试试
      

  3.   

    已经解决了,因为 Message 类的 ArrayList 里放了Socket对象,而Socket没有实现 Serializable 接口。