簡體   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