Exception in thread "Thread-4" java.lang.ClassCastException: org.oxomoco.packets.PacketAlive cannot be cast to org.oxomoco.packets.PacketMessage
at org.oxomoco.server.SocketConnectionServer.run(SocketConnectionServer.java:52)
at java.lang.Thread.run(Unknown Source)
它发生在这里:
PacketMessage pm = (PacketMessage)ois.readObject();
循环中的内容如下所示:
while(true){
//if(ois.readObject() instanceof PacketMessage){
// pm = (PacketMessage)ois.readObject();
// se.println(ois.readObject().toString());
//}
if((ois.readObject() instanceof PacketMessage)==true){
System.out.println("It is: " + (ois.readObject() instanceof PacketMessage));
PacketMessage pm = (PacketMessage)ois.readObject();
se.acprintln(">>",uname + ": " +pm.getMsg());
}
if((ois.readObject() instanceof PacketAlive)==true){
System.out.println("-it is: " + (ois.readObject() instanceof PacketAlive));
PacketAlive pa = (PacketAlive)ois.readObject();
}
}
不知何故 - 即使我检查实例 - 对象输入流是PacketMessage的实例,它应该是PacketAlive的实例。有没有人知道为什么,当然 - 如何解决它?
答案 0 :(得分:5)
您正在执行
ois.readObject()
几次,并且每次获得一个不同的对象(不同的类?)。 readObject()
从流中提取每个对象,而不是将其留在那里。
相反,读取它,分配给变量然后执行测试等,例如
while (true) {
Object obj = ois.readObject();
// do something with obj...
答案 1 :(得分:3)
尝试将ois.readObject()的返回值赋给变量,而不是将其调用两次。
每次调用readObject时,都会从流中消耗更多的字节,每次都不会返回相同的对象。