我正在尝试使用网络库kryonet创建一个多人游戏,我得到了连接和发送字符串的工作,但现在我正在尝试发送对象。我想做的是发送一个数组列表,但它给了我这个错误。我也尝试只发送一个对象,它给了我同样的错误。
Exception in thread "Client" com.esotericsoftware.kryonet.KryoNetException: Error during deserialization.
at com.esotericsoftware.kryonet.TcpConnection.readObject(TcpConnection.java:141)
at com.esotericsoftware.kryonet.Client.update(Client.java:247)
at com.esotericsoftware.kryonet.Client.run(Client.java:333)
at java.lang.Thread.run(Thread.java:745)
Caused by: com.esotericsoftware.kryo.KryoException: Class cannot be created (missing no-arg constructor): com.connorbrezinsky.spaceraiders.objects.Metor
at com.esotericsoftware.kryo.Kryo.newInstantiator(Kryo.java:1048)
at com.esotericsoftware.kryo.Kryo.newInstance(Kryo.java:1060)
at com.esotericsoftware.kryo.serializers.FieldSerializer.create(FieldSerializer.java:228)
at com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:217)
at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:735)
at com.esotericsoftware.kryo.serializers.CollectionSerializer.read(CollectionSerializer.java:109)
at com.esotericsoftware.kryo.serializers.CollectionSerializer.read(CollectionSerializer.java:18)
at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:735)
at com.esotericsoftware.kryonet.KryoSerialization.read(KryoSerialization.java:58)
at com.esotericsoftware.kryonet.TcpConnection.readObject(TcpConnection.java:139)
... 3 more
我尝试在Metor类中创建一个没有参数的构造函数,但这也不起作用
Exception in thread "Client" com.esotericsoftware.kryonet.KryoNetException: Error during deserialization.
at com.esotericsoftware.kryonet.TcpConnection.readObject(TcpConnection.java:141)
at com.esotericsoftware.kryonet.Client.update(Client.java:247)
at com.esotericsoftware.kryonet.Client.run(Client.java:333)
at java.lang.Thread.run(Thread.java:745)
Caused by: com.esotericsoftware.kryo.KryoException: java.lang.IllegalArgumentException: Can not set org.newdawn.slick.geom.Shape field com.connorbrezinsky.spaceraiders.objects.Object.s to java.lang.Float
Serialization trace:
s (com.connorbrezinsky.spaceraiders.objects.Metor)
metors (com.connorbrezinsky.spaceraiders.main.Response)
at com.esotericsoftware.kryo.serializers.FieldSerializer$ObjectField.read(FieldSerializer.java:626)
at com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:221)
at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:735)
at com.esotericsoftware.kryo.serializers.CollectionSerializer.read(CollectionSerializer.java:109)
at com.esotericsoftware.kryo.serializers.CollectionSerializer.read(CollectionSerializer.java:18)
at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:654)
at com.esotericsoftware.kryo.serializers.FieldSerializer$ObjectField.read(FieldSerializer.java:605)
at com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:221)
at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:735)
at com.esotericsoftware.kryonet.KryoSerialization.read(KryoSerialization.java:58)
at com.esotericsoftware.kryonet.TcpConnection.readObject(TcpConnection.java:139)
... 3 more
Caused by: java.lang.IllegalArgumentException: Can not set org.newdawn.slick.geom.Shape field com.connorbrezinsky.spaceraiders.objects.Object.s to java.lang.Float
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167)
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:171)
at sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:81)
at java.lang.reflect.Field.set(Field.java:764)
at com.esotericsoftware.kryo.serializers.FieldSerializer$ObjectField.read(FieldSerializer.java:619)
... 13 more
Kryo kryo = client.getKryo();
kryo.register(Request.class);
kryo.register(Response.class);
kryo.register(java.util.ArrayList.class);
kryo.register(Metor.class);
client.start();
try {
client.connect(10000, "192.168.1.130", 54555);
} catch (Exception er) {
er.printStackTrace();
}
Request request = new Request();
request.text="map_metor";
client.sendTCP(request);
client.addListener(new Listener() {
public void received(Connection connection, Object object) {
Response response = (Response) object;
System.out.println(response.metors);
}
});
public static Server server;
public static World world;
public static final int PORT = 54555;
public static void main(String[] args) throws IOException {
System.out.println("Starting server...");
server = new Server();
world = new World(2000,2000);
Kryo kryo = server.getKryo();
kryo.register(Request.class);
kryo.register(Response.class);
kryo.register(java.util.ArrayList.class);
kryo.register(Metor.class);
server.start();
server.bind(54555);
System.out.println("Server started, generating world");
world.setMaxMetors(20);
world.setMaxPlanets(10);
world.generateObjects();
server.addListener(new Listener() {
public void received(Connection connection, Object object) {
if (object instanceof Request) {
Request request = (Request) object;
System.out.println(request.text);
if (request.text.equalsIgnoreCase("map_metor")) {
Response response = new Response();
response.metors = world.metors;
connection.sendTCP(response);
}else if(request.text.equalsIgnoreCase("map_planets")) {
Response response = new Response();
response.planets = world.planets;
connection.sendTCP(response);
}
}
}
});
}
编辑:所以我得出的结论是,Kryonet在序列化slick2d图像类时有问题,或者与Kryonet和slick2d有不同的冲突。
你必须确保你的类中有你用Kryonet发送的所有相同的变量。
在任何人试图告诉我这是一个重复之前,我已经试过了关于这个的解决方案,以及几乎所有其他我能找到的答案。 我的项目在IntelliJ中构建得很好,通过了我设置的所有测试,它甚至在IntelliJ内部运行得也很好,当我试图运行maven构建的JAR时,除了几个例外,我就被打了个耳光。 代码所指向的类: 根据我看到的例外情况,当通过命令提示符运行时,问题出现在第31行,它将是: 命令提示符中的堆栈跟踪如下
我在使用Jackson1.9.13(和Jackson2.5.0)进行序列化/反序列化时遇到了一个问题,现在已经解决了几天了,没有任何成功。 我的目标是使用@jsonanygetter&@jsonanysetter,我想动态地计算对象是否应该写入输出。我有一个用ObjectMapper序列化的JSON定义(并检查是否应该包含对象),然后将对象转换回字符串。 为此,我使用了一个“HidableSeri
我在AWS上建立了一个汇流平台。我的源是MySql,我已经使用debezium连接器将它连接到Kafka connect。源的数据格式是JSON。现在在KSQL中,我创建了一个派生主题,并将JSON主题转换为AVRO以使数据能够使用JDBC连接器下沉到MYSQL。我使用了以下查询: 派生主题: 我曾尝试使用JSON消息直接下沉到mysql,但失败了,因为连接器需要模式,所以带模式的JSON或Avr
我在序列化和反序列化同一JVM中的对象列表时遇到问题。确切地说,现在我的对象与对象具有相同的引用,它有以下规则: 现在在我的对象列表反序列化之后,在某个时候字母表引用不匹配。我用以下方法检查了一下: 得到了以下结果 现在看看VMId,既然它们是相同的,那么它不应该是相同的对象吗,就像上面的逻辑一样?谢谢你的帮助。
这个示例直接取自Spark示例代码,所以我不太清楚到底发生了什么。 我在localhost上运行的Spark独立集群上运行这个。 工人始终失败: 我运行的是Java 11,使用的是Spark 3.0.1。 我确实发现了一个非常相似的问题,看起来它就是答案:java。lang.ClassCastException在远程服务器上的spark作业中使用lambda表达式 然而,在确保将TestSpark
问题内容: 我有一个发送到服务器或从服务器发送的用户对象。发送用户对象时,我不想将哈希密码发送给客户端。因此,我添加了password属性,但这也阻止了将其反序列化为密码,这使得在没有密码的情况下很难注册用户。 我怎样才能只应用序列化而不是反序列化?我使用的是Spring JSONView,因此对的控制不多。 我尝试过的事情: 添加到属性 仅添加getter方法 问题答案: 确切的操作方法取决于你