致命异议:第一次发布时的GLThread

时间:2016-06-26 17:22:09

标签: android libgdx

我做了一个应用程序,效果很好,但发生了一些奇怪的事情。当您第一次安装应用程序时,打开它并打开暂停,锁定您的手机,然后单击图标继续它,当它加载时,单击BACK按钮(Gdx.app.exit();),它给出我有以下例外:

E/AndroidRuntime: FATAL EXCEPTION: GLThread 1723
       java.lang.NullPointerException
       at com.badlogic.gdx.Game.render(Game.java:46)
       at com.badlogic.gdx.backends.android.AndroidGraphics.onDrawFrame(AndroidGraphics.java:459)
       at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1524)
       at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1248)

再次启动应用程序后,它可以正常运行。 因此,试图找出这个错误,我用gdx-setup.jar创建了一个新项目。我没有改变AndroidLauncher,也没有改变。只有在清单中我才将风景改为肖像。我只有4个类,几乎没有代码,问题仍然存在。可能有人知道会发生什么。我将不胜感激任何帮助。谢谢!

我的代码:

主要课程。

public class TenPuzzle extends Game {

    @Override
    public void create () {

        setScreen(new SplashScreen(this));
    }

}

SpalashScreen.java

 public class SplashScreen extends Screens{

    public SplashScreen(TenPuzzle ten) {
        super(ten);

        Gdx.app.log("1010", "SPLASH");

    }

    @Override
    public void draw(float delta) {
        game.setScreen(new MainMenuScreen(game));

    }

    @Override
    public void update(float delta) {

    }

}

MainMenuScreen.java

 public class MainMenuScreen extends Screens {


    public MainMenuScreen(TenPuzzle ten) {
        super(ten);

        Gdx.app.log("1010", "Main menu screen");
    }

    @Override
    public void draw(float delta) {}

    @Override
    public void update(float delta) {}

    public boolean keyDown(int keycode) {

        if(keycode == Input.Keys.BACK){
                Gdx.app.exit();
        }
        return false;
    }

}

和Screens.java

public abstract class Screens extends InputAdapter implements Screen {

    public static float SCREEN_WIDTH = 575;
    public static float SCREEN_HEIGHT = 1024;

    public TenPuzzle game;

    public OrthographicCamera oCam;
    public SpriteBatch batcher;
    public Stage stage;
    public static float diffViewportStage;
    public Screens(TenPuzzle game) {
        this.game = game;
        stage = new Stage(new ExtendViewport(Screens.SCREEN_WIDTH,
                    Screens.SCREEN_HEIGHT, 768, 1224));

        oCam = new OrthographicCamera(stage.getWidth(), stage.getHeight());
            oCam.position.set(stage.getWidth()/ 2,stage.getHeight()/2f, 0);


        InputMultiplexer input = new InputMultiplexer(this, stage);
        Gdx.input.setInputProcessor(input);
        Gdx.input.setCatchBackKey(true);

    }

    @Override
    public void render(float delta) {

        update(delta);
        oCam.update();
        stage.act(delta);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        draw(delta);
        stage.draw();

    }

    public abstract void draw(float delta);

    public abstract void update(float delta);

    @Override
    public void resize(int width, int height) {

        stage.getViewport().update(width, height, true);

    }

    @Override
    public void show() {
    }

    @Override
    public void hide() {

    }

    @Override
    public void pause() {
    }

    @Override
    public void resume() {

    }

    @Override
    public void dispose() {
        stage.dispose();

    }

    @Override
    public boolean keyDown(int keycode) {
        return super.keyDown(keycode);
    }


}

1 个答案:

答案 0 :(得分:0)

好的,我找到了解决方案。我的代码没问题,问题是这里描述的Android错误:Re-launch of Activity on Home button, but...only the first time