gpt4 book ai didi

java - 在 mapchange 场景中可以接受 try catch

转载 作者:太空狗 更新时间:2023-10-29 16:41:59 24 4
gpt4 key购买 nike

我确实在这里阅读了有关 try catch performance 的其他帖子,但我不确定如果我在我的观点中使用它是否合适。
我在我的 gameLoop 的某些点使用它。
首先。我正在使用 libgdx Stage and Actor 系统。但是,当我更改 map 以清除舞台时,它有时会在舞台上抛出 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,因为我无法以任何其他方式处理它。我尝试了状态并在更改 map 和清理舞台并添加新怪物时将状态更改为其他内容。但它实际上犯了同样的错误。 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());
}
}

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

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

最佳答案

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

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

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

关于java - 在 mapchange 场景中可以接受 try catch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16286161/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com