【问题标题】:LibGDX can load skin on Desktop but not on AndroidLibGDX 可以在桌面上加载皮肤,但不能在 Android 上加载
【发布时间】:2016-07-15 08:01:40
【问题描述】:

此代码在桌面上运行良好,但是当我在我的安卓手机上运行它时出现错误。 代码:

public class MainClass extends ApplicationAdapter {

private Stage stage;
private Skin skin;

@Override
public void create () {
    skin=new Skin(Gdx.files.internal("uiskin.json"));
    stage=new Stage(new ScreenViewport());

    final Label label=new Label("This is a label",skin,"default");
    label.setPosition(250,0);
    label.setWidth(300);
    label.setHeight(50);

    stage.addActor(label);
    Gdx.input.setInputProcessor(stage);
}

@Override
public void render () {
    Gdx.gl.glClearColor(0.5f, 0.5f, 0.5f, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    stage.act(Gdx.graphics.getDeltaTime());
    stage.draw();
}

@Override
public void dispose() {
    super.dispose();
    stage.dispose();
    skin.dispose();
}

}

错误:

07-15 03:53:11.298 30926-30956/com.test.skintest E/AndroidRuntime: FATAL EXCEPTION: GLThread 14997
                                                               Process: com.test.skintest, PID: 30926
                                                               com.badlogic.gdx.utils.SerializationException: Error reading file: uiskin.json
                                                                   at com.badlogic.gdx.scenes.scene2d.ui.Skin.load(Skin.java:97)
                                                                   at com.badlogic.gdx.scenes.scene2d.ui.Skin.<init>(Skin.java:74)
                                                                   at com.test.skintest.MainClass.create(MainClass.java:22)
                                                                   at com.badlogic.gdx.backends.android.AndroidGraphics.onSurfaceChanged(AndroidGraphics.java:290)
                                                                   at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1511)
                                                                   at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1239)
                                                                Caused by: com.badlogic.gdx.utils.SerializationException: Error reading file: uiskin.json
                                                                   at com.badlogic.gdx.utils.Json.fromJson(Json.java:694)
                                                                   at com.badlogic.gdx.scenes.scene2d.ui.Skin.load(Skin.java:95)
                                                                   at com.badlogic.gdx.scenes.scene2d.ui.Skin.<init>(Skin.java:74) 
                                                                   at com.test.skintest.MainClass.create(MainClass.java:22) 
                                                                   at com.badlogic.gdx.backends.android.AndroidGraphics.onSurfaceChanged(AndroidGraphics.java:290) 
                                                                   at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1511) 
                                                                   at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1239) 
                                                                Caused by: com.badlogic.gdx.utils.SerializationException: Error parsing file: uiskin.json
                                                                   at com.badlogic.gdx.utils.JsonReader.parse(JsonReader.java:77)
                                                                   at com.badlogic.gdx.utils.Json.fromJson(Json.java:692)
                                                                   at com.badlogic.gdx.scenes.scene2d.ui.Skin.load(Skin.java:95) 
                                                                   at com.badlogic.gdx.scenes.scene2d.ui.Skin.<init>(Skin.java:74) 
                                                                   at com.test.skintest.MainClass.create(MainClass.java:22) 
                                                                   at com.badlogic.gdx.backends.android.AndroidGraphics.onSurfaceChanged(AndroidGraphics.java:290) 
                                                                   at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1511) 
                                                                   at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1239) 
                                                                Caused by: com.badlogic.gdx.utils.GdxRuntimeException: Error reading file: uiskin.json (Internal)
                                                                   at com.badlogic.gdx.backends.android.AndroidFileHandle.read(AndroidFileHandle.java:77)
                                                                   at com.badlogic.gdx.files.FileHandle.reader(FileHandle.java:163)
                                                                   at com.badlogic.gdx.utils.JsonReader.parse(JsonReader.java:75)
                                                                   at com.badlogic.gdx.utils.Json.fromJson(Json.java:692) 
                                                                   at com.badlogic.gdx.scenes.scene2d.ui.Skin.load(Skin.java:95) 
                                                                   at com.badlogic.gdx.scenes.scene2d.ui.Skin.<init>(Skin.java:74) 
                                                                   at com.test.skintest.MainClass.create(MainClass.java:22) 
                                                                   at com.badlogic.gdx.backends.android.AndroidGraphics.onSurfaceChanged(AndroidGraphics.java:290) 
                                                                   at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1511) 
                                                                   at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1239) 
                                                                Caused by: java.io.FileNotFoundException: uiskin.json
                                                                   at android.content.res.AssetManager.openAsset(Native Method)
                                                                   at android.content.res.AssetManager.open(AssetManager.java:334)
                                                                   at android.content.res.AssetManager.open(AssetManager.java:308)
                                                                   at com.badlogic.gdx.backends.android.AndroidFileHandle.read(AndroidFileHandle.java:75)
                                                                   at com.badlogic.gdx.files.FileHandle.reader(FileHandle.java:163) 
                                                                   at com.badlogic.gdx.utils.JsonReader.parse(JsonReader.java:75) 
                                                                   at com.badlogic.gdx.utils.Json.fromJson(Json.java:692) 
                                                                   at com.badlogic.gdx.scenes.scene2d.ui.Skin.load(Skin.java:95) 
                                                                   at com.badlogic.gdx.scenes.scene2d.ui.Skin.<init>(Skin.java:74) 
                                                                   at com.test.skintest.MainClass.create(MainClass.java:22) 
                                                                   at com.badlogic.gdx.backends.android.AndroidGraphics.onSurfaceChanged(AndroidGraphics.java:290) 
                                                                   at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1511) 
                                                                   at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1239) 

我知道错误是因为手机找不到uiskin.json,但我不明白为什么。

【问题讨论】:

    标签: java android libgdx scene2d


    【解决方案1】:

    Gdx.files.internal 指向assets 目录,所以你的文件应该是assets/uiskin.json。这与路径相对于根目录或工作目录的桌面不同。

    https://github.com/libgdx/libgdx/wiki/File-handling

    【讨论】:

    • 我将此文件:github.com/libgdx/libgdx/blob/master/tests/gdx-tests-android/… 移至资产,但我仍然收到相同的错误
    • 您是使用旧的目录结构还是带有 gradle 的新目录结构?它应该是:&lt;projectdir&gt;/assets/uiskin.json 旧的和新的结构 &lt;projectdir&gt;/&lt;module&gt;/src/main/assets/uiskin.json
    • 我使用的是旧的目录结构
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-27
    • 1970-01-01
    • 2016-09-12
    • 1970-01-01
    • 2016-05-23
    • 2021-06-11
    • 1970-01-01
    相关资源
    最近更新 更多