You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中LibGDX加载uiskin.json遇SerializationException错误求助

解决LibGDX加载uiskin.json时的JSON解析错误

从你的错误日志能看出,核心问题出在JSON文件的解析阶段——即便你重新格式化了JSON结构,依然在第二行触发解析失败。这通常不是语法问题,而是文件编码或隐藏字符导致的,下面是具体的排查和解决步骤:

1. 移除JSON文件的UTF-8 BOM标记

Windows下很多编辑器(比如系统自带记事本)保存UTF-8文件时,会自动添加字节顺序标记(BOM),而LibGDX的JsonReader无法识别这个隐藏标记,会把它当作JSON内容的一部分,直接导致解析失败。

解决方法:

  • 用专业编辑器(比如Notepad++、VS Code)打开uiskin.json
  • 在Notepad++中,选择顶部菜单「编码」→「UTF-8无BOM」后保存文件
  • 在VS Code中,点击右下角的编码标识(比如「UTF-8」),选择「通过编码保存」→「UTF-8」(注意不要选带BOM的选项)

2. 再次校验JSON语法正确性

虽然你已经格式化了JSON,但还是可以再确认一遍细节:

  • 用Android Studio的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"
    }
  }
}

3. 检查文件路径与大小写

确保:

  • UI文件夹和uiskin.json确实在你的assets目录下
  • 路径大小写和代码中完全一致(桌面平台对大小写敏感,比如不要代码里写UI,实际文件夹是ui)

4. 优化Skin加载代码

你当前的加载顺序是正确的,但可以尝试用Skin的构造函数一次性加载,避免分步加载可能出现的问题:

// 先获取图集资源
TextureAtlas atlas = MathsVsZombies.manager.get("UI/uiskin.atlas", TextureAtlas.class);
// 直接通过构造函数加载Skin,同时传入JSON和图集
this.skin = new Skin(Gdx.files.internal("UI/uiskin.json"), atlas);
// 再添加自定义字体
this.skin.add("default-font", MathsVsZombies.font24);

5. 排查其他隐藏问题

如果以上步骤都无效,可以:

  • 新建一个空白JSON文件,把正确的JSON内容复制进去(规避原文件的隐藏字符),再保存为UTF-8无BOM格式
  • 确认LibGDX版本和Android Studio 2.3.3兼容(你的AS版本较旧,建议使用对应版本的稳定版LibGDX)

按照这些步骤排查,应该能解决JSON解析的问题。如果之后出现资源找不到的错误,再检查atlas文件中的资源名称是否和JSON里的引用一致。

内容的提问来源于stack exchange,提问作者Shahzeb Manjlai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:23:42