[英]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.