繁体   English   中英

getX()调用的NullPointerException(Scene2d + Libgdx)

[英]NullPointerException on getX() call (Scene2d + Libgdx)

我正在尝试创建一个简单的BreakOut克隆来熟悉LibGDX和scene2d。 然而,在组装了一个非常基本的示例以使自己开始之后,我在一个非常明确定义的对象上得到了NullPointerException。

我有一个名为Paddle的Actor类,在我的程序中有一个实例,简单地称为paddle。 它被声明为全局变量并在create()方法中初始化。 当我运行程序时,它在代码中的render()方法中返回一个错误,该代码检查paddle是否在屏幕的边界之外:

// make sure the paddle stays within the bounds of the screen
if(paddle.getX() < 0) paddle.setX(0); // <--- error is detected here
if(paddle.getX() > 800 - 200) paddle.setX(600);

这是返回的错误:

Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: java.lang.NullPointerException
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:111)
Caused by: java.lang.NullPointerException
    at com.freakout.Game.render(Game.java:150)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:190)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:108)

这是Paddle课程;

public class Paddle extends Actor {
TextureRegion region;
public Paddle(){
    region = new TextureRegion(new Texture(Gdx.files.internal("paddle.png")), 800/2 - 200 /2, 20);
    }
}

这是代码 ,以防有助于查看整个事情。

编辑:我得到了答案,感谢评论:我意识到我在发布后立即错过了 - 看起来我重新定义了桨变量的范围(通过使用Paddle paddle = new Paddle(...))是本地的方法而不是全局。 因此,当它试图访问该对象时,它总是返回null,因为该对象在create()方法之外是不可访问的。

如果您的Actors在基本呼叫上无法正常工作时遇到问题,那可能是您的罪魁祸首。

我已经完成了你的代码,我发现在你的create()方法中你通过“ new Paddle() ”创建了一个Paddle,并将它分配给这一行中的局部变量“ paddle ”“ Paddle paddle = new Paddle(); ” 。 所以实际上因此,Game类的名为“ paddle ”的变量仍然未初始化(因为被方法的局部变量隐藏)。 因此,当在render()方法中访问它时,会得到NullPointerException

要摆脱这个问题,只需将“ Paddle paddle = new Paddle(); ”此行改为“ paddle = new Paddle(); ”即可完成。

paddle变量被赋值为null或未初始化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM