Java Kyro序列化错误

Java Kyro序列化错误,java,serialization,kryo,Java,Serialization,Kryo,我在学校用eclipse开发了我的thumbdrive,并把它带回家了 下一次运行程序时,我突然出现了这个错误: Exception in thread "main" java.lang.IllegalArgumentException: Unable to create serializer "com.esotericsoftware.kryo.serializers.FieldSerializer" for class: com.esotericsoftware.kryonet.Frame

我在学校用eclipse开发了我的thumbdrive,并把它带回家了

下一次运行程序时,我突然出现了这个错误:

 Exception in thread "main" java.lang.IllegalArgumentException: Unable to create serializer "com.esotericsoftware.kryo.serializers.FieldSerializer" for class: com.esotericsoftware.kryonet.FrameworkMessage$RegisterTCP
    at com.esotericsoftware.kryo.Kryo.newSerializer(Kryo.java:338)
    at com.esotericsoftware.kryo.Kryo.newDefaultSerializer(Kryo.java:317)
    at com.esotericsoftware.kryo.Kryo.getDefaultSerializer(Kryo.java:310)
    at com.esotericsoftware.kryo.Kryo.register(Kryo.java:354)
    at com.esotericsoftware.kryonet.KryoSerialization.<init>(KryoSerialization.java:33)
    at com.esotericsoftware.kryonet.KryoSerialization.<init>(KryoSerialization.java:25)
    at com.esotericsoftware.kryonet.Client.<init>(Client.java:73)
    at com.esotericsoftware.kryonet.Client.<init>(Client.java:55)
    at test.TestClient.<init>(TestClient.java:32)
    at test.TestClient.main(TestClient.java:39)
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:532)
    at com.esotericsoftware.kryo.Kryo.newSerializer(Kryo.java:325)
    ... 9 more
Caused by: java.lang.IncompatibleClassChangeError: Found interface org.objectweb.asm.MethodVisitor, but class was expected
    at com.esotericsoftware.reflectasm.FieldAccess.insertConstructor(FieldAccess.java:144)
    at com.esotericsoftware.reflectasm.FieldAccess.get(FieldAccess.java:109)
    at com.esotericsoftware.kryo.serializers.FieldSerializer.rebuildCachedFields(FieldSerializer.java:104)
    at com.esotericsoftware.kryo.serializers.FieldSerializer.<init>(FieldSerializer.java:50)
    ... 14 more
线程“main”java.lang.IllegalArgumentException中的异常:无法为类com.esotericsoftware.kryo.serializers.FieldSerializer创建序列化程序“com.esotericsoftware.kryonet.FrameworkMessage$RegisterCp” 位于com.esotericsoftware.kryo.kryo.newSerializer(kryo.java:338) 在com.esotericsoftware.kryo.kryo.newDefaultSerializer上(kryo.java:317) 位于com.esotericsoftware.kryo.kryo.getDefaultSerializer(kryo.java:310) 登录com.esotericsoftware.kryo.kryo.register(kryo.java:354) 在com.esotericsoftware.kryonet.KryoSerialization.(KryoSerialization.java:33) 在com.esotericsoftware.kryonet.KryoSerialization.(KryoSerialization.java:25) 位于com.esotericsoftware.kryonet.Client.(Client.java:73) 位于com.esotericsoftware.kryonet.Client.(Client.java:55) TestClient.(TestClient.java:32) 位于test.TestClient.main(TestClient.java:39) 原因:java.lang.reflect.InvocationTargetException 位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法) 位于sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 位于java.lang.reflect.Constructor.newInstance(Constructor.java:532) 位于com.esotericsoftware.kryo.kryo.newSerializer(kryo.java:325) ... 9更多 原因:java.lang.CompatibleClassChangeError:找到接口org.objectweb.asm.MethodVisitor,但应为类 位于com.esotericsoftware.reflectasm.FieldAccess.insertConstructor(FieldAccess.java:144) 位于com.esotericsoftware.reflectasm.FieldAccess.get(FieldAccess.java:109) 位于com.esotericsoftware.kryo.serializers.FieldSerializer.rebuildCachedFields(FieldSerializer.java:104) 位于com.esotericsoftware.kryo.serializers.FieldSerializer.(FieldSerializer.java:50) ... 14多
我从未见过这种错误,我不知道如何修复它。每次我使用kryonet库时都会发生这种情况。有可用的解决方案吗?

工作伙伴也有相同的错误。这是使用旧的“asm”库造成的。当最新的Kryo(截至本文撰写时为2.18)需要ASM4.X时,他正在使用3.X。更新asm库修复了该问题

工作伙伴也有同样的错误。这是使用旧的“asm”库造成的。当最新的Kryo(截至本文撰写时为2.18)需要ASM4.X时,他正在使用3.X。更新asm库修复了该问题

正如Nushio所回答的,但似乎您有库冲突,您有多个引用不同版本asm的依赖项,您需要通过执行
mvn dependency:tree
来找出导致冲突的人。之后,您必须在引用错误asm版本(<4.x)的依赖项中进行maven排除。

正如Nushio所回答的,但您似乎有库冲突,您有多个引用不同版本asm的依赖项,您需要通过执行
mvn dependency:tree
,找出冲突的起因。之后,必须在引用错误asm版本(<4.x)的依赖项中进行maven排除