Java libgdx-解析default.fnt时读取uiskin.json、NumberFormatException时出错

Java libgdx-解析default.fnt时读取uiskin.json、NumberFormatException时出错,java,libgdx,numberformatexception,Java,Libgdx,Numberformatexception,我在为libgdx实现默认用户界面外观时遇到问题。当我尝试将uiskin.json作为纹理图集加载时,当我试图解析包含default.fnt的行时,会抛出错误,谈论NumberFormatException 这是我的带有错误的堆栈跟踪 Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: com.badlogic.gdx.utils.GdxRuntimeException: Erro

我在为libgdx实现默认用户界面外观时遇到问题。当我尝试将
uiskin.json
作为纹理图集加载时,当我试图解析包含
default.fnt
的行时,会抛出错误,谈论
NumberFormatException

这是我的带有错误的堆栈跟踪

Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: com.badlogic.gdx.utils.GdxRuntimeException: Error reading pack file: uiskin.json
    at com.badlogic.gdx.assets.AssetManager.handleTaskError(AssetManager.java:560)
    at com.badlogic.gdx.assets.AssetManager.update(AssetManager.java:365)
    at com.dizydev.robotwars.screens.LoadScreen.update(LoadScreen.java:64)
    at com.dizydev.robotwars.screens.AbstractScreen.render(AbstractScreen.java:55)
    at com.dizydev.robotwars.RobotWars.render(RobotWars.java:41)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:215)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:120)
Caused by: com.badlogic.gdx.utils.GdxRuntimeException: Error reading pack file: uiskin.json
    at com.badlogic.gdx.graphics.g2d.TextureAtlas$TextureAtlasData.<init>(TextureAtlas.java:187)
    at com.badlogic.gdx.assets.loaders.TextureAtlasLoader.getDependencies(TextureAtlasLoader.java:58)
    at com.badlogic.gdx.assets.loaders.TextureAtlasLoader.getDependencies(TextureAtlasLoader.java:34)
    at com.badlogic.gdx.assets.AssetLoadingTask.handleSyncLoader(AssetLoadingTask.java:99)
    at com.badlogic.gdx.assets.AssetLoadingTask.update(AssetLoadingTask.java:88)
    at com.badlogic.gdx.assets.AssetManager.updateTask(AssetManager.java:488)
    at com.badlogic.gdx.assets.AssetManager.update(AssetManager.java:363)
    ... 5 more
Caused by: java.lang.NumberFormatException: For input string: "{ default-font: { file: default.fnt } }"
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at com.badlogic.gdx.graphics.g2d.TextureAtlas$TextureAtlasData.<init>(TextureAtlas.java:116)
    ... 11 more
我的
资产
文件夹中有所有必需的文件,下面是文件列表。它们都在默认的
资产
文件夹中

default.fnt
default.png
uiskin.atlas
uiskin.json
uiskin.png
由于错误似乎出现在
uiskin.json
文件的解析过程中,因此这里是我拥有的
uiskin.json
文件的副本

{
com.badlogic.gdx.graphics.g2d.BitmapFont: { default-font: { file: default.fnt } },
com.badlogic.gdx.graphics.Color: {
    green: { a: 1, b: 0, g: 1, r: 0 },
    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.Skin$TintedDrawable: {
    dialogDim: { name: white, color: { r: 0, g: 0, b: 0, a: 0.45 } },
},
com.badlogic.gdx.scenes.scene2d.ui.Button$ButtonStyle: {
    default: { down: default-round-down, up: default-round },
    toggle: { down: default-round-down, checked: default-round-down, up: default-round }
},
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.ScrollPane$ScrollPaneStyle: {
    default: { vScroll: default-scroll, hScrollKnob: default-round-large, background: default-rect, hScroll: default-scroll, vScrollKnob: default-round-large }
},
com.badlogic.gdx.scenes.scene2d.ui.SelectBox$SelectBoxStyle: {
    default: {
        font: default-font, fontColor: white, background: default-select,
        scrollStyle: default,
        listStyle: { font: default-font, selection: default-select-selection }
    }
},
com.badlogic.gdx.scenes.scene2d.ui.SplitPane$SplitPaneStyle: {
    default-vertical: { handle: default-splitpane-vertical },
    default-horizontal: { handle: default-splitpane }
},
com.badlogic.gdx.scenes.scene2d.ui.Window$WindowStyle: {
    default: { titleFont: default-font, background: default-window, titleFontColor: white },
    dialog: { titleFont: default-font, background: default-window, titleFontColor: white, stageBackground: dialogDim }
},
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 }
},
com.badlogic.gdx.scenes.scene2d.ui.Slider$SliderStyle: {
    default-horizontal: { background: default-slider, knob: default-slider-knob },
    default-vertical: { background: default-slider, knob: default-round-large }
},
com.badlogic.gdx.scenes.scene2d.ui.Label$LabelStyle: {
    default: { font: default-font, fontColor: white }
},
com.badlogic.gdx.scenes.scene2d.ui.TextField$TextFieldStyle: {
    default: { selection: selection, background: textfield, font: default-font, fontColor: white, cursor: cursor }
},
com.badlogic.gdx.scenes.scene2d.ui.CheckBox$CheckBoxStyle: {
    default: { checkboxOn: check-on, checkboxOff: check-off, font: default-font, fontColor: white }
},
com.badlogic.gdx.scenes.scene2d.ui.List$ListStyle: {
    default: { fontColorUnselected: white, selection: selection, fontColorSelected: white, font: default-font }
},
com.badlogic.gdx.scenes.scene2d.ui.Touchpad$TouchpadStyle: {
    default: { background: default-pane, knob: default-round-large }
},
com.badlogic.gdx.scenes.scene2d.ui.Tree$TreeStyle: {
    default: { minus: tree-minus, plus: tree-plus, selection: default-select-selection }
},
com.badlogic.gdx.scenes.scene2d.ui.TextTooltip$TextTooltipStyle: {
    default: {
        label: { font: default-font, fontColor: white },
        background: default-pane, wrapWidth: 150
    }
},
}
有人知道我为什么会犯这个错误吗?这对我来说似乎并不直观,我也不确定这是解析错误还是其他原因,因为默认用户界面外观所需的所有文件都是可用的最新版本。如果有人能帮助我,我将不胜感激

编辑:

给我的第一个答案并没有解决我的问题。下面是我为尝试第一种解决方案而对代码所做的更改

game.manager.load("uiskin.png", TextureAtlas.class);
skin = new Skin(Gdx.files.internal("uiskin.json"), game.manager.get("uiskin.png", TextureAtlas.class));
这是它提供给我的错误堆栈跟踪

Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: com.badlogic.gdx.utils.GdxRuntimeException: Error reading pack file: uiskin.png
    at com.badlogic.gdx.assets.AssetManager.handleTaskError(AssetManager.java:560)
    at com.badlogic.gdx.assets.AssetManager.update(AssetManager.java:365)
    at com.dizydev.robotwars.screens.LoadScreen.update(LoadScreen.java:64)
    at com.dizydev.robotwars.screens.AbstractScreen.render(AbstractScreen.java:55)
    at com.dizydev.robotwars.RobotWars.render(RobotWars.java:41)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:215)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:120)
Caused by: com.badlogic.gdx.utils.GdxRuntimeException: Error reading pack file: uiskin.png
    at com.badlogic.gdx.graphics.g2d.TextureAtlas$TextureAtlasData.<init>(TextureAtlas.java:187)
    at com.badlogic.gdx.assets.loaders.TextureAtlasLoader.getDependencies(TextureAtlasLoader.java:58)
    at com.badlogic.gdx.assets.loaders.TextureAtlasLoader.getDependencies(TextureAtlasLoader.java:34)
    at com.badlogic.gdx.assets.AssetLoadingTask.handleSyncLoader(AssetLoadingTask.java:99)
    at com.badlogic.gdx.assets.AssetLoadingTask.update(AssetLoadingTask.java:88)
    at com.badlogic.gdx.assets.AssetManager.updateTask(AssetManager.java:488)
    at com.badlogic.gdx.assets.AssetManager.update(AssetManager.java:363)
    ... 5 more
Caused by: com.badlogic.gdx.utils.GdxRuntimeException: Invalid line: 
    at com.badlogic.gdx.graphics.g2d.TextureAtlas.readTuple(TextureAtlas.java:443)
    at com.badlogic.gdx.graphics.g2d.TextureAtlas$TextureAtlasData.<init>(TextureAtlas.java:115)
    ... 11 more
对这个

com.badlogic.gdx.scenes.scene2d.ui.TextTooltip$TextTooltipStyle: {
    default: {
        label: { font: default-font, fontColor: white },
        background: default-pane
    }
},
我的新代码如下所示

game.manager.load("uiskin.json", Skin.class);
skin = game.manager.get("uiskin.json", Skin.class);

libgdx引擎是开放的,您可以在github中查看源代码,因此通常最好使用它。正如你所见,问题是一致的

    116.    width = Integer.parseInt(tuple[0]);      // <- this especially
    117.    height = Integer.parseInt(tuple[1]);
而不是

    game.manager.load("uiskin.json", TextureAtlas.class);
该.json文件不是atlas定义的类型您需要创建实例。地图集定义包含地图集图形上图像的位置和大小

然后,加载TextureAtlas后,应该使用的构造函数

    Skin(FileHandle skinFile, TextureAtlas atlas)

您正在为蒙皮提供JSON定义,然后为其提供TextureAtlas


这是您应该采用的方法。

您的解决方案不起作用。我已经对我的帖子进行了编辑,以扩大它给我带来的错误,希望能提供更多的澄清。我当然很抱歉我做了一个mistsake-TextureAtlas需要。atlas文件-检查我的编辑谢谢,你的帖子实际上帮助我解决了我的问题。我在上面做了一个编辑来解释这个修正,它和你的一样,但是它需要另一个调整。
    game.manager.load("uiskin.atlas", TextureAtlas.class);
    game.manager.load("uiskin.json", TextureAtlas.class);
    Skin(FileHandle skinFile, TextureAtlas atlas)
    skin = new Skin(Gdx.files.internal("uiskin.json"), game.manager.get("uiskin.png", TextureAtlas.class));