【发布时间】:2015-07-06 04:59:53
【问题描述】:
我的班级中有一小段代码扩展了监听器:
@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.packet.Packet 在 com.xkynar.game.net.ServerSocket.received(ServerSocket.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(未知来源)
异常发生在演员表中,即:
Packet packet = (Packet) object;
这怎么可能? “FrameworkMessage$KeepAlive”到底是什么?为什么它会进入我收到的听众?
请解释一下出了什么问题,是我的错误还是错误?
【问题讨论】: