SerializationException Error reading JSON file in Android Studio for LibGDX uiskin

SerializationException Error reading JSON file in Android Studio for LibGDX uiskin

我正在尝试使用 Android Studio 2.3.3 在 LibGDX 中加载一个 uiskin.json 文件以用于我的应用程序皮肤。但是,当我尝试加载皮肤时出现以下错误:

Exception in thread "LWJGL Application" com.badlogic.gdx.utils.SerializationException: Error reading file: UI/uiskin.json
at com.badlogic.gdx.scenes.scene2d.ui.Skin.load(Skin.java:98)
at com.mathsvszombies2.game.Screens.HomeScreen.show(HomeScreen.java:66)
at com.badlogic.gdx.Game.setScreen(Game.java:61)
at com.mathsvszombies2.game.Screens.StartScreen.render(StartScreen.java:58)
at com.badlogic.gdx.Game.render(Game.java:46)
at com.mathsvszombies2.game.MathsVsZombies.render(MathsVsZombies.java:42)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:225)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.run(LwjglApplication.java:126) 
Caused by: com.badlogic.gdx.utils.SerializationException: Error reading file: UI/uiskin.json
at com.badlogic.gdx.utils.Json.fromJson(Json.java:702)
at com.badlogic.gdx.scenes.scene2d.ui.Skin.load(Skin.java:96)
... 7 more
Caused by: com.badlogic.gdx.utils.SerializationException: Error parsing file: UI/uiskin.json
at com.badlogic.gdx.utils.JsonReader.parse(JsonReader.java:77)
at com.badlogic.gdx.utils.Json.fromJson(Json.java:700)
... 8 more
Caused by: com.badlogic.gdx.utils.SerializationException: Error parsing JSON on line 2 near: {
  *ERROR*com.badlogic.gdx.graphics.Color: {
  white: { a: 1, b: 1, g: 1,
at com.badlogic.gdx.utils.JsonReader.parse(JsonReader.java:549)
at com.badlogic.gdx.utils.JsonReader.parse(JsonReader.java:55)
at com.badlogic.gdx.utils.JsonReader.parse(JsonReader.java:75)
... 9 more

我的uiskin.json文件如下:

{
  com.badlogic.gdx.graphics.Color: {
  white: { a: 1, b: 1, g: 1, r: 1 },
  red: { a: 1, b: 0, g: 0, r: 1 },
  black: { a: 1, b: 0, g: 0, r: 0 }
},
  com.badlogic.gdx.scenes.scene2d.ui.Label$LabelStyle: {
  default: { font: default-font }
},
  com.badlogic.gdx.scenes.scene2d.ui.TextButton$TextButtonStyle: {
  default: { down: default-round-down, up: default-round, font: default-
font, fontColor: white },
  toggle: { down: default-round-down, up: default-round, checked: default-
round-down, font: default-font, fontColor: white, downFontColor: red }
},
  com.badlogic.gdx.scenes.scene2d.ui.ProgressBar$ProgressBarStyle: {
  default-horizontal: { background: default-slider, knob: default-slider-
knob },
  default-vertical: { background: default-slider, knob: default-round-large 
}
}
}

这是我用来加载 uiskin.json 文件的代码:

this.skin = new Skin();
this.skin.addRegions(MathsVsZombies.manager.get("UI/uiskin.atlas", TextureAtlas.class));
this.skin.add("default-font", MathsVsZombies.font24);
this.skin.load(Gdx.files.internal("UI/uiskin.json"));

编辑:这是我使用的新格式化的JSON文件

{
  "com.badlogic.gdx.graphics.Color":{
    "white":{
      "a":1,
      "b":1,
      "g":1,
      "r":1
    },
    "red":{
      "a":1,
      "b":0,
      "g":0,
      "r":1
    },
    "black":{
      "a":1,
      "b":0,
      "g":0,
      "r":0
    }
  },
  "com.badlogic.gdx.scenes.scene2d.ui.Label$LabelStyle":{
    "default":{
      "font":"default-font"
    }
  },
  "com.badlogic.gdx.scenes.scene2d.ui.TextButton$TextButtonStyle":{
    "default":{
      "down":"default-round-down",
      "up":"default-round",
      "font":"default-font",
      "fontColor":"white"
    },
    "toggle":{
      "down":"default-round-down",
      "up":"default-round",
      "checked":"default-round-down",
      "font":"default-font",
      "fontColor":"white",
      "downFontColor":"red"
    }
  },
  "com.badlogic.gdx.scenes.scene2d.ui.ProgressBar$ProgressBarStyle":{
    "default-horizontal":{
      "background":"default-slider",
      "knob":"default-slider-knob"
    },
    "default-vertical":{
      "background":"default-slider",
      "knob":"default-round-large"
    }
  }
}

这是我在 运行 应用新的 JSON 文件时得到的完整回溯

Exception in thread "LWJGL Application" com.badlogic.gdx.utils.SerializationException: Error reading file: UI/uiskin.json
at com.badlogic.gdx.scenes.scene2d.ui.Skin.load(Skin.java:98)
at com.mathsvszombies2.game.Screens.HomeScreen.show(HomeScreen.java:66)
at com.badlogic.gdx.Game.setScreen(Game.java:61)
at com.mathsvszombies2.game.Screens.StartScreen.render(StartScreen.java:58)
at com.badlogic.gdx.Game.render(Game.java:46)
at com.mathsvszombies2.game.MathsVsZombies.render(MathsVsZombies.java:42)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:225)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.run(LwjglApplication.java:126)
Caused by: com.badlogic.gdx.utils.SerializationException: Error reading file: UI/uiskin.json
    at com.badlogic.gdx.utils.Json.fromJson(Json.java:702)
    at com.badlogic.gdx.scenes.scene2d.ui.Skin.load(Skin.java:96)
    ... 7 more
Caused by: com.badlogic.gdx.utils.SerializationException: Error parsing file: UI/uiskin.json
    at com.badlogic.gdx.utils.JsonReader.parse(JsonReader.java:77)
    at com.badlogic.gdx.utils.Json.fromJson(Json.java:700)
    ... 8 more
Caused by: com.badlogic.gdx.utils.SerializationException: Error parsing JSON 
on line 2 near: {
  *ERROR*"com.badlogic.gdx.graphics.Color":{
    "white":{
      "a":1,
    at com.badlogic.gdx.utils.JsonReader.parse(JsonReader.java:549)
    at com.badlogic.gdx.utils.JsonReader.parse(JsonReader.java:55)
    at com.badlogic.gdx.utils.JsonReader.parse(JsonReader.java:75)
    ... 9 more

请帮忙。谢谢

SerializationException是输入无效造成的。您可以阅读有关此异常的所有信息 right here。在这种情况下,异常告诉您 uiskin.json 文件中存在错误。

如何解决这个问题:

  • 运行 您的 uiskin.json 代码通过 JSON 验证器,例如 this one.

  • 阅读验证器给你的错误消息并相应地重写你的JSON。

我为您完成了上述步骤,发现错误是由几个无效的换行符引起的。它还给出了错误,指出 none 的字符串用引号引起来,但我认为这不再是主要问题。

在编辑 json 文件以消除所有错误后,验证器给了我所有的清晰信息并很好地格式化了它。

所以,这是格式正确且有效的 json 文件。

uiskin.json:

{
   "com.badlogic.gdx.graphics.Color":{
      "white":{
         "a":1,
         "b":1,
         "g":1,
         "r":1
      },
      "red":{
         "a":1,
         "b":0,
         "g":0,
         "r":1
      },
      "black":{
         "a":1,
         "b":0,
         "g":0,
         "r":0
      }
   },
   "com.badlogic.gdx.scenes.scene2d.ui.Label$LabelStyle":{
      "default":{
         "font":"default-font"
      }
   },
   "com.badlogic.gdx.scenes.scene2d.ui.TextButton$TextButtonStyle":{
      "default":{
         "down":"default-round-down",
         "up":"default-round",
         "font":"default-font",
         "fontColor":"white"
      },
      "toggle":{
         "down":"default-round-down",
         "up":"default-round",
         "checked":"default-round-down",
         "font":"default-font",
         "fontColor":"white",
         "downFontColor":"red"
      }
   },
   "com.badlogic.gdx.scenes.scene2d.ui.ProgressBar$ProgressBarStyle":{
      "default-horizontal":{
         "background":"default-slider",
         "knob":"default-slider-knob"
      },
      "default-vertical":{
         "background":"default-slider",
         "knob":"default-round-large"
      }
   }
}

我没有测试过这段代码,但是,我相信这个解决方案应该可以解决这个异常。

希望我的回答对您有所帮助,如果您有任何其他问题,请随时在下面发表评论!

原来 JSON 文件没问题,只是 Android 工作室在玩游戏。我重新启动它,它现在运行良好。