2

我正在尝试让一个简单的客户端/服务器类进行通信,以便以后用于实现我的 MP 游戏。问题是Unable to create serializer当我这样做时遇到了这个异常new Client(),这个问题显然可能是由于 ASM 库从 Kryonet jar 中过时引起的。

好吧,我确实做到了:更新库。我仍然得到错误。我继续尝试https://groups.google.com/forum/#!topic/kryonet-users/D5ssaQyWeR4建议的解决方案

而且还是不行……

我不知所措,没有更多的在线解决方案与我尝试过的不同,并且严重浪费了我的时间与这个错误。真的需要克服这一点才能将其扩大到我的游戏中。以下是错误:

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:337)
    at com.esotericsoftware.kryo.Kryo.newDefaultSerializer(Kryo.java:316)
    at com.esotericsoftware.kryo.Kryo.getDefaultSerializer(Kryo.java:309)
    at com.esotericsoftware.kryo.Kryo.register(Kryo.java:353)
    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:75)
    at com.esotericsoftware.kryonet.Client.<init>(Client.java:57)
    at gamep2.net.client.GameClient.<init>(GameClient.java:30)
    at gamep2.net.client.GameClient.main(GameClient.java:55)
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:526)
    at com.esotericsoftware.kryo.Kryo.newSerializer(Kryo.java:324)
    ... 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

现在,这是一个简单的 Client 类:

public class GameClient extends Thread{

    public Client client;

    public GameClient() throws IOException{

        this.client = new Client();
        this.register();

        NetworkListener netList = new NetworkListener();
        netList.init(client);
        client.addListener(netList);

        client.start();

        Log.info("[CLIENT] Attempting to connect...");

        client.connect(5000, "192.168.1.13", 54556);

    }

    public void register(){

        Kryo kryo = client.getKryo();
        kryo.register(Packet0LoginRequest.class);
        kryo.register(Packet1LoginAnswer.class);
        kryo.register(Packet2Message.class);
    }
}

现在是服务器类:

public class Start {

    private static Server server;
    private int port = 54556;

    public Start() throws IOException{

        server = new Server();
        registerPackets();
        server.addListener(new NetworkListener());
        server.bind(port);
        server.start();

        System.out.println("Port: " + port);
        System.out.println("Starting server...");
    }

    private void registerPackets(){

        Kryo kryo = server.getKryo();
        kryo.register(Packet0LoginRequest.class);
        kryo.register(Packet1LoginAnswer.class);
        kryo.register(Packet2Message.class);
    }

    public static void main(String[] args){
        try {
            new Start();
            Log.set(Log.LEVEL_DEBUG);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
4

0 回答 0