私は奇妙な問題を抱えています。チャット オプションを使用して単純なクライアント - サーバー アプリを作成しようとしていますが、問題が発生しました - オブジェクト入力ストリームが間違ったクラスを読み取ります。エラーは次のとおりです。
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();
}
}
どういうわけか-インスタンスをチェックしても-オブジェクト入力ストリームは、PacketAliveのインスタンスである必要がある場合、PacketMessageのインスタンスです。その理由、そしてもちろん、それを修正する方法を知っている人はいますか?