2016-07-15 11 views
0

Dieser Code funktioniert gut auf dem Desktop, aber wenn ich es auf meinem Android-Handy ausführen, erhalte ich einen Fehler. Der Code:LibGDX kann Haut auf dem Desktop laden, aber nicht auf Android

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(); 
} 

}

Der Fehler:

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)  

Ich weiß, dass der Fehler entsteht, weil das Telefon nicht uiskin.json finden können, aber ich verstehe nicht, warum.

Antwort

1

Gdx.files.internal verweist auf assets Verzeichnis, so dass Ihre Datei assets/uiskin.json sein sollte. Dies unterscheidet sich vom Desktop, wenn der Pfad relativ zum Stamm- oder Arbeitsverzeichnis ist.

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

+0

zog ich diese Datei: https://github.com/libgdx/libgdx/blob/master/tests/gdx-tests-android/assets/data/uiskin.json auf Vermögenswerte, aber ich bekomme immer noch der gleiche Fehler –

+0

Verwenden Sie alte Verzeichnisstruktur oder neue mit Gradle? Es sollte sein: '/assets/uiskin.json' für alte und neue Struktur' //src/main/assets/uiskin.json' –

+0

Ich verwende die alte Verzeichnisstruktur –