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 在 com .badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:113) 原因:com.badlogic.gdx.utils.SerializationException:无法创建类(缺少无参数构造函数):com.bvo.easyBim .Model.Cursor 在 com.badlogic.gdx.utils.Json.newInstance(Json.java:915) 在 com.badlogic.gdx.utils.Json.readValue(Json.java:793) 在 com.badlogic.gdx.utils .Json.readValue(Json.java:803) 在 com.badlogic.gdx.utils.Json.fromJson(Json.java:644) 在 com.bvo.easyBim.View.DataProcessor.load(DataProcessor.java:85) 在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) 在 com.bvo.easyBim.EasyBim.render(EasyBim.java:39) 在 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.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) 在 com.badlogic.gdx.Game.render(Game.java:46) 在 com.bvo.easyBim.EasyBim.render(EasyBim .java:39) 在 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.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) 在 com.badlogic.gdx.Game.render(Game.java:46) 在 com.bvo.easyBim.EasyBim.render(EasyBim .java:39) 在 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.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 更多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 更多

在将 json 文件正确保存在另一段代码中后,我正在尝试将其转换回数据映射。(哈希图)但这似乎不起作用。

我猜他无法阅读文本字符串,但我实际上不知道问题是什么。

4

1 回答 1

7

异常消息“无法创建类(缺少无参数构造函数):com.bvo.easyBim.Model.Cursor”准确描述了问题所在。

Libgdx JSON 代码使用反射来创建对象实例并初始化它们。在您的示例中,保存的 JSON 文件中必须有一个com.bvo.easyBim.Model.Cursor。因此,在读取该文件时,JSON 代码需要创建一个 a 的实例Cursor来放入数据。它假定有一个可用于创建空的无参数构造函数Cursor(否则它无法确定哪个构造函数是合适的)。但是,似乎没有这种方法。

您要么必须向 中添加无参数构造函数Cursor,要么必须添加知道如何保存Cursor实例并知道在读Cursor回时要调用的适当构造函数。

于 2013-03-07T22:57:07.770 回答