class - Java Kryonet Error when sending object -
i using kryonet tcp sending of objects, particularly 1 called transfermessage:
public static class transfermessage{string text; string username; color color = color.black;} now, know have call kryo.register(transfermessage.class) when attempt connect server classes registered, error:
exception in thread "server" com.esotericsoftware.kryo.kryoexception: java.lang.illegalargumentexception: class not registered: java.awt.color note: register class use: kryo.register(java.awt.color.class); serialization trace: color (com.andrewlalisofficial.messagetypes$transfermessage) @ com.esotericsoftware.kryo.serializers.fieldserializer$objectfield.write(fieldserializer.java:585) @ com.esotericsoftware.kryo.serializers.fieldserializer.write(fieldserializer.java:213) @ com.esotericsoftware.kryo.kryo.writeclassandobject(kryo.java:571) @ com.esotericsoftware.kryonet.kryoserialization.write(kryoserialization.java:50) @ com.esotericsoftware.kryonet.tcpconnection.send(tcpconnection.java:192) @ com.esotericsoftware.kryonet.connection.sendtcp(connection.java:59) @ com.esotericsoftware.kryonet.server.sendtoalltcp(server.java:435) @ com.andrewlalisofficial.chatserver.sendmessage(chatserver.java:204) @ com.andrewlalisofficial.chatserver.checkcommand(chatserver.java:124) @ com.andrewlalisofficial.chatserver$1.received(chatserver.java:72) @ 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(thread.java:745) caused by: java.lang.illegalargumentexception: class not registered: java.awt.color i don't understand because although registered class uses color class, never before had register string objects, don't see difference here is, , how fix error? thank in advance help.
edit :
here minimal reproducible code showing error while serializing color :
// works fine public static void main(string[] args) { kryo kryo = new kryo(); kryo.register(color.class, new javaserializer()); color color = new color(15006); output output = new output(new byte[1024]); kryo.writeobject(output, color); input input = new input(output.getbuffer()); color color2 = kryo.readobject(input, color.class); if (!color.equals(color2)) throw new assertionerror(); }
string must registered default. i'm bit surprised of error myself because have been able serialize classes did not register because kryo possesses default serializers trivially serializable classes. anyway, since java.awt.color implements java.io.serializable,
kryoregistrator.register(color.class, new javaserializer()); you can write own serializer (using kryo) if want, i'm not sure it's worth (it's simple integer serialize, there no way standard library inefficiently). if want anyway, here :
public class colorserializer extends serializer<color> { @override public color read(kryo kryo, input input, class<color> clazz) { return new color(input.readint()); } @override public void write(kryo kryo, output output, color color) { output.write(color.getrgb()); } }
Comments
Post a Comment