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