我的课堂上有一小段代码扩展了监听器:
@Override
public void received(Connection connection, Object object)
{
Packet packet = (Packet) object;
server.addPacket(new ClientPacket(connection.getID(), packet));
}
每当我收到一个对象时,我都会将它转换为一个名为 Packet 的接口,并使用每个数据包都实现的方法 handle()。然后我将它添加到 ConcurrentLinkedQueue 以供将来处理。
尽管如此,在我向服务器发送 UDP 数据包的几个键发送垃圾邮件后,仍会引发以下异常:
线程“服务器”java.lang.ClassCastException 中的异常:com.esotericsoftware.kryonet.FrameworkMessage$KeepAlive 无法在 com.xkynar.game.net.ServerSocket.received (ServerSocket) 上转换为 com.xkynar.game.net.packet.Packet .java:70) 在 com.esotericsoftware.kryonet.Server$1.received(Server.java:61) 在 com.esotericsoftware.kryonet.Connection.notifyReceived(Connection.java:246) 在 com.esotericsoftware.kryonet.Server.update (Server.java:208) 在 com.esotericsoftware.kryonet.Server.run(Server.java:356) 在 java.lang.Thread.run(Unknown Source)
异常发生在演员表中,即:
Packet packet = (Packet) object;
这怎么可能?“FrameworkMessage$KeepAlive”到底是什么?为什么它会进入我收到的听众?
请解释什么是错的,是我的错误还是错误?