2016-03-21 7 views
1

ネットワークライブラリkryonetを使用してマルチプレイヤーゲームを作成しようとしていますが、接続を確立して文字列を送信していますが、今はオブジェクトを送信しようとしています。私がしたいのは配列リストを送ることですが、このエラーが出ます。私も1つのオブジェクトを送信しようとし、それは私に同じエラーを与えた。デシリアライズ中の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クラスの無引数を持つコンストラクタを作成しようとしたが、それはまた、HERESにクライアントコード

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); 

       } 
      }); 

HERESにサーバーコード

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 

を動作しませんでした

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); 
       } 
      } 
     } 
    }); 



} 

長いポストに申し訳ありませんが、これはまったく何かを気にしない限り、ちょっと変わった問題のようです。

EDIT: だから私はKryonetがslick2d Imageクラスをシリアル化の問題を持っているか、Kryonet & slick2dと異なる競合があるという結論に達しました。

+0

2番目のスタックトレースの後に 'IllegalArgumentException:org.newdawn.slick.geom.Shapeフィールドcom.connorbrezinsky.spaceraiders.objects.Object.sをjava.lang.Float'に設定できません - タイプは何ですか? 's'の?なぜ浮動小数点値にしようとしていると思いますか? –

+0

手がかりがなく、私はオブジェクトを取り除き、今はイメージオブジェクトに行っています。私はかなりレスポンスとリクエストクラスを持っていますが、わかりません。それを理解するためには、いくつかのクラスを完全に書き直す必要があります。 @ジムガリソン – user2580555

答えて

0

kryonetで送信するクラスに同じ変数がすべてあることを確認する必要があります。

関連する問題