2

我确实在这里阅读了 try catch 性能的其他帖子,但我不确定如果我在我的观点中使用它是否可以。
我在我的游戏循环中使用它。
首先。我正在使用 libgdxStage 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)

所以我添加了一个简单的尝试捕获,因为我无法以任何其他方式处理它。我尝试了一个状态,并在更改地图并清除舞台并添加新怪物时将状态更改为其他状态。但它实际上犯了同样的错误。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());
        }
    }

如果这没问题,我有点困惑,因为我或多或少看起来像是一个“修复它”的解决方案。它确实可以正常工作。当然,当我更改地图时,它有时会抛出,但我不明白为什么。
我还需要在我的怪物的查找方法中添加一个 try catch。如果我进入mapchange,而它在我对怪物的碰撞检测中确实超出了界限。

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

4

1 回答 1

5

你说的对。这是一个黑客。hack 可能有助于您取得进步,但在某些时候您需要找出导致 NPE 的原因。

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

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

于 2013-04-29T19:02:48.153 回答