3

このコードを実行しようとすると、次のようになります。

public void load(String filename) { 
   FileHandle file = Gdx.files.external(filename + ".bim");
   Json json = new Json();      
   String text = file.readString();
   datamap.clear(); 
   datamap = json.fromJson(HashMap.class, text);

エラーが発生します:

スレッド「LWJGLアプリケーション」の例外com.badlogic.gdx.utils.GdxRuntimeException:com.badlogic.gdx.utils.SerializationException:クラスを作成できません(引数なしのコンストラクターがありません):com.bvo.easyBim.Model.Cursor at com .badlogic.gdx.backends.lwjgl.LwjglApplication $ 1.run(LwjglApplication.java:113)原因:com.badlogic.gdx.utils.SerializationException:クラスを作成できません(引数なしのコンストラクターがありません):com.bvo.easyBim .Model.Cursor at com.badlogic.gdx.utils.Json.newInstance(Json.java:915)at com.badlogic.gdx.utils.Json.readValue(Json.java:793)at com.badlogic.gdx.utils .Json.readValue(Json.java:803)at com.badlogic.gdx.utils.Json.fromJson(Json.java:644)at com.bvo.easyBim.View.DataProcessor.load(DataProcessor.java:85)at com.bvo.easyBim.View.World.init(World.java:115)(com.bvo.easyBim.View)。WorldRenderer.buttons(WorldRenderer.java:173)at com.bvo.easyBim.View.WorldRenderer.render(WorldRenderer.java:106)at com.bvo.easyBim.Screens.AppScreen.render(AppScreen.java:22)at com .badlogic.gdx.Game.render(Game.java:46)at com.bvo.easyBim.EasyBim.render(EasyBim.java:39)at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java :187)com.badlogic.gdx.backends.lwjgl.LwjglApplication $ 1.run(LwjglApplication.java:110)原因:java.lang.InstantiationException:com.bvo.easyBim.Model.Cursoratjava.lang.Class。 newInstance0(Unknown Source)at java.lang.Class.newInstance(Unknown Source)at com.badlogic.gdx.utils.Json.newInstance(Json.java:901)... 12 more106)com.bvo.easyBim.Screens.AppScreen.render(AppScreen.java:22)at com.badlogic.gdx.Game.render(Game.java:46)at com.bvo.easyBim.EasyBim.render(EasyBim .java:39)at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:187)at com.badlogic.gdx.backends.lwjgl.LwjglApplication $ 1.run(LwjglApplication.java:110)原因:java.lang.InstantiationException:com.bvo.easyBim.Model.Cursor at java.lang.Class.newInstance0(Unknown Source)at java.lang.Class.newInstance(Unknown Source)at com.badlogic.gdx.utils.Json .newInstance(Json.java:901)...12詳細106)com.bvo.easyBim.Screens.AppScreen.render(AppScreen.java:22)at com.badlogic.gdx.Game.render(Game.java:46)at com.bvo.easyBim.EasyBim.render(EasyBim .java:39)at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:187)at com.badlogic.gdx.backends.lwjgl.LwjglApplication $ 1.run(LwjglApplication.java:110)原因:java.lang.InstantiationException:com.bvo.easyBim.Model.Cursor at java.lang.Class.newInstance0(Unknown Source)at java.lang.Class.newInstance(Unknown Source)at com.badlogic.gdx.utils.Json .newInstance(Json.java:901)...12詳細mainLoop(LwjglApplication.java:187)at com.badlogic.gdx.backends.lwjgl.LwjglApplication $ 1.run(LwjglApplication.java:110)原因:java.lang.InstantiationException:com.bvo.easyBim.Model.Cursor at java .lang.Class.newInstance0(Unknown Source)at java.lang.Class.newInstance(Unknown Source)at com.badlogic.gdx.utils.Json.newInstance(Json.java:901)... 12 moremainLoop(LwjglApplication.java:187)at com.badlogic.gdx.backends.lwjgl.LwjglApplication $ 1.run(LwjglApplication.java:110)原因:java.lang.InstantiationException:com.bvo.easyBim.Model.Cursor at java .lang.Class.newInstance0(Unknown Source)at java.lang.Class.newInstance(Unknown Source)at com.badlogic.gdx.utils.Json.newInstance(Json.java:901)... 12 more

別のコードに正しく保存された後、jsonファイルをデータマップに変換し直そうとしています。(ハッシュマップ)が、これは機能していないようです。

彼は文字列を読めないと思いますが、実は何が問題なのかわかりません。

4

1 に答える 1

7

例外メッセージ「クラスを作成できません(引数なしのコンストラクターがありません):com.bvo.easyBim.Model.Cursor」は、何が問題になっているのかを正確に説明しています。

Libgdx JSONコードは、リフレクションを使用してオブジェクトのインスタンスを作成し、それらを初期化します。あなたの例でcom.bvo.easyBim.Model.Cursorは、保存されたJSONファイルにが含まれている必要があります。したがって、そのファイルを読み取るとき、JSONコードCursorはデータを入れるためのaのインスタンスを作成する必要があります。これは、空を作成するために使用できる引数のないコンストラクターがあることを前提としていますCursor(そうでない場合はどのコンストラクターが適切かを判断できません)。 )。しかし、そのような方法はないようです。

に引数なしのコンストラクターを追加するか、保存方法を知っているCursorカスタムシリアライザー(https://code.google.com/p/libgdx/wiki/JsonParsing#Customizing_serializationを参照)を追加する必要があります。インスタンスであり、を読み戻すCursorときに呼び出す適切なコンストラクターを知っています。Cursor

于 2013-03-07T22:57:07.770 に答える