是mapchange场景中可接受的try catch

Ben*_*nnX 2 java android libgdx

我确定在这里阅读其他帖子的尝试捕获性能,但我不确定如果我在我的观点中使用它是否正常.
我在gameLoop的某些地方使用它.
首先.我正在使用libgdx Stage and Actor系统.但是当我改变地图时清除舞台,它有时会NullPointerException在舞台上播种.

Exception in thread "LWJGL Application" java.lang.NullPointerException
at com.badlogic.gdx.scenes.scene2d.Group.act(Group.java:48)
at com.badlogic.gdx.scenes.scene2d.Stage.act(Stage.java:202)
at com.badlogic.gdx.scenes.scene2d.Stage.act(Stage.java:166)
at com.portaaenigma.screens.GameScreen.render(GameScreen.java:91)
at com.badlogic.gdx.Game.render(Game.java:46)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:202)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:110)
Run Code Online (Sandbox Code Playgroud)

所以我添加了一个简单的try catch,因为我无法以任何其他方式处理它.我尝试了状态,并在更改地图和清除舞台并添加新怪物时将状态更改为其他内容.但它确实会犯同样的错误.try catch看起来像这样:

    if (this.status == GameStatus.GAME) {
        try {
            this.figureStage.act(); // figures act <-- this is line 91
        } catch (NullPointerException e) {
            // catching nullpointer at mapchange
            Gdx.app.log(this.getClass().getSimpleName(),
                    "Nullpointer catched at mapswitch: " + e.getMessage());
        }
    }
Run Code Online (Sandbox Code Playgroud)

如果这是可以的,我有点困惑,因为我看起来或多或少像一个"修复它"的解决方案.它没有任何问题.当我改变地图时它肯定会抛出,但我不明白为什么.
我还需要在我的怪物的查找方法中添加一个try catch.如果我进入mapchange,而它在怪物的碰撞检测时会超出界限.

好的一般问题是,如果这是一个可以接受的解决方案,或者是否应该有更好的解决方案?

Mel*_*son 5

你是对的.这是一个黑客.黑客可能很好地帮助你取得进步,但在某些时候你需要找出导致你的NPE的原因.

读取堆栈,找到NPE的行,找出哪个指针为null,然后找到一种方法来阻止它为null或添加一个分支以防止该代码运行.

一个技巧可能有助于在可能的情况下使用有效对象代替null.例如,如果您正在查找不存在的人,请返回NOBODY对象(您自己定义)而不是null.使用中性值覆盖所有选择器(获取方法).