【问题标题】:Incomprehensible NullPointerException难以理解的 NullPointerException
【发布时间】:2015-01-10 08:11:28
【问题描述】:

我有一个非常基本的程序,它应该显示一个标签和一个文本字段。我能够显示文本。对于文本字段,我可以毫无错误地创建它,但是当我将它添加到舞台并运行程序时,我有这个错误:

Exception in thread "LWJGL Application" java.lang.NullPointerException
at com.badlogic.gdx.scenes.scene2d.ui.TextField.draw(TextField.java:301)
at com.badlogic.gdx.scenes.scene2d.Group.drawChildren(Group.java:111)
at com.badlogic.gdx.scenes.scene2d.Group.draw(Group.java:58)
at com.badlogic.gdx.scenes.scene2d.Stage.draw(Stage.java:128)
at com.pace.converter.MainMenuScreen.render(MainMenuScreen.java:52)
at com.badlogic.gdx.Game.render(Game.java:46)
at com.pace.converter.MyGdxGame.render(MyGdxGame.java:21)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:207)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:114)

由于我不知道如何在我的 cmets 的代码块中输入行号,以下是错误指向的行:

MainMenuScreen.java: 52 是

stage.draw();

MyGdxGame.java: 21 是

super.render();

我不明白为什么我在将 TextField 添加到舞台之前创建了这个 NullPointerException。 这是我的完整代码:

主要活动:

public class MyGdxGame extends Game {
    SpriteBatch batch;
    AssetManager assets;

    @Override
    public void create () {
        batch = new SpriteBatch();
        assets = new AssetManager();

        this.setScreen(new LoadingScreen(this));
    }

    @Override
    public void render () {
        super.render();
    }

    public void dispose () {
        batch.dispose();
    }
}

主菜单屏幕:

public MainMenuScreen(final MyGdxGame gam) {
    game = gam;

    camera = new OrthographicCamera();
    camera.setToOrtho(false, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());

    skin = new Skin(Gdx.files.internal("skin.json"));
    stage = new Stage();

    labelStyle = new LabelStyle(game.assets.get("font1.ttf", BitmapFont.class), Color.WHITE);
    labelTest = new Label("Test", labelStyle);
    textFieldTest = new TextField("Test", skin);

    stage.addActor(labelTest);
    stage.addActor(textFieldTest);
}

@Override
public void render(float delta) {
    Gdx.gl.glClearColor(0.281f, 0.602f, 0.844f, 0);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    game.batch.setProjectionMatrix(camera.combined);

    stage.act();
    stage.draw();
}

【问题讨论】:

  • 为什么不调试问题或获取源jar或有问题的库文件的反汇编代码并查看问题?你甚至没有告诉我们你正在使用的 libgdx 的版本,所以将你的行号与实际代码联系起来是不可能的。

标签: java nullpointerexception libgdx


【解决方案1】:

首先,您需要检查一些可能是 null.. 的内容,将您的代码包装在 try-catch 块中 我不知道stage是什么,但请检查它是否已初始化?

如果stage 不是null 然后签入您的Main menu Screen

skin = new Skin(Gdx.files.internal("skin.json")); // is the skin null ? if the file 'skin.json' couldn't be found then this would be null.. check this

textFieldTest = new TextField("Test", skin); // If skin is null, you're adding it here

至于super.render();,它甚至应该在这里调用吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-22
    • 2010-10-28
    • 2014-11-15
    • 2014-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多