簡體   English   中英

Java-空指針異常

[英]Java - Null pointer exception

我正在創建一個簡單的視頻游戲,並且我一直在嘗試添加一些基本的碰撞檢測。 我是在我創建的entityCollision.class中執行此操作的。 碰撞檢測使用放置在AI字符外部的矩形。 我正在嘗試通過執行以下操作創建這些矩形:

Movement Movement;
AIMovement AIMovement;

Rectangle player = new Rectangle(Movement.x + 4, Movement.y, 56, 64);
Rectangle robot1 = new Rectangle(AIMovement.x[0] + 16, AIMovement.y[0], 32, 64);
Rectangle robot2 = new Rectangle(AIMovement.x[2] + 16, AIMovement.y[2], 32, 64);
Rectangle robot3 = new Rectangle(AIMovement.x[3] + 16, AIMovement.y[3], 32, 64);
Rectangle robot4 = new Rectangle(AIMovement.x[4] + 16, AIMovement.y[4], 32, 64);

在代碼中,我首先采用一種非靜態的方式來刷新該類。 之后,我嘗試使用其他類中的電線進行變量制作。 這是因為它給了我nullpointerexeption,就在第一個矩形的行上。 我正在使用的所有三個類都是在大約同一時間創建的,這是代碼:

Main Main;
Movement Movement;
AIMovement AIMovement;
Bullet Bullet;
entityCollision entityCollision;

public GamePanel() throws FileNotFoundException, InterruptedException{
    Movement = new Movement();
    AIMovement = new AIMovement();
    Bullet = new Bullet();
    entityCollision = new entityCollision();

像上面的代碼一樣,在創建代碼后立即得到錯誤消息。

我想知道在其他類變量不為null或其他獲取錯誤的方法之后創建了entityCollision類的情況下,該如何處理。

請發表評論,我將添加更多代碼或回答問題

你為什么從

Rectangle robot1 = new Rectangle(AIMovement.x[0] + 16, AIMovement.y[0], 32, 64);

Rectangle robot2 = new Rectangle(AIMovement.x[2] + 16, AIMovement.y[2], 32, 64);?

在您的第四個機器人上,如果AIMovement.x[4]和/或對應的y沒有任何東西(我假設沒有),那么您正在將一個空指針傳遞給Rectangle類構造函數。

首先解決所有變量名與類名沖突的情況。 最好的方法是遵循以下約定:將每個變量命名為小寫字母,將每個類命名為大寫字母。

你有一大堆的這些情況,和他們說曖昧是否如Movement.x獲取靜態變量xMovement類或實例變量xMovement變量-這是空,這樣表達會給出一個NullPointerException異常。

現在,您需要在使用之前設置這些變量。

如果您仍然對導致異常的原因不解,請在調試器中逐步執行代碼,查看異常發生的位置以及此時的null。 如果該語句具有多個可能導致異常的表達式,則可以將其拆分為較小的部分。

例如new Rectangle(aIMovement.x[0] + 16, aIMovement.y[0], 32, 64)如果aIMovement為null或aIMovement.x為null或aIMovement.y為null new Rectangle(aIMovement.x[0] + 16, aIMovement.y[0], 32, 64)將引發NPE。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM