Java-空指针异常

Java-空指针异常,java,Java,我正在创建一个简单的视频游戏,我一直在尝试添加一些基本的碰撞检测。我是在我创建的entityCollision.class中执行此操作的。碰撞检测使用放置在AI字符外部的矩形。我试图通过以下操作创建这些矩形: Movement Movement; AIMovement AIMovement; Rectangle player = new Rectangle(Movement.x + 4, Movement.y, 56, 64); Rectangle robot1 = new Rectangle

我正在创建一个简单的视频游戏,我一直在尝试添加一些基本的碰撞检测。我是在我创建的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);
在代码中,我首先使用非静态方式引用该类。之后,我尝试使用其他类中的连接线生成变量。这就是它给我的NullPointerExection,就在第一个矩形的直线上。我使用的所有三个类都是在同一时间创建的,代码如下:

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();
我在创建代码后立即得到错误,就像上面的代码一样

我想知道,如果entityCollision类是在其他类变量不为null后创建的,或者是通过其他方式获得错误信息,我会怎么做

只需发表评论,我会添加更多代码或回答问题

您为什么从

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


在第四个机器人上,如果
AIMovement.x[4]
和/或相应的
y
中没有任何内容(我假设没有),那么您将向
矩形
类构造函数传递一个空指针。

首先修复变量名与类名冲突的所有情况。最好的方法是遵循以小写字母开始命名每个变量和以大写字母开始命名每个类的约定

您有一大堆这样的情况,它们使得eg
Movement.x
Movement
类获取静态变量
x
,还是从
Movement
变量获取实例变量
x
变得模棱两可——该变量为null,因此表达式将给出NullPointerException

现在,您需要在使用之前设置这些变量

如果您仍然对导致异常的原因感到困惑,请在调试器中逐步检查代码,查看异常发生的位置以及该点的null值。如果该语句具有多个可能导致异常的表达式,则可以将其拆分为较小的部分


例如,如果
aIMovement
为null或
aIMovement.x
为null或
aIMovement.x
为null或
aIMovement.y
为null,则
新矩形(aIMovement.x[0]+16,aIMovement.y[0],32,64)
将抛出一个NPE。

实际堆栈跟踪是什么?您真的对变量和类使用了相同的名称
entityCollision
?我不确定它是否可以编译,但你不想这样做。每个类名都应该以大写字母开头。这是一个重要的约定,因为它修复了出现的歧义,例如,
在Java中有许多不同的含义。仅供参考,
new
创建一个类的实例,即实例化该类。它不创建类或代码。@Jerry101它将允许编译小写的类名,但正如您所说,非常糟糕的做法。调试NullPointerException的一般建议:在调试器中逐步检查代码,查看哪一行引发异常,以及在该点上哪些值为null。@Jerrt101我刚刚将类文件重命名为大写字母e将变量更改为ec,但没有任何更改
Rectangle robot2 = new Rectangle(AIMovement.x[2] + 16, AIMovement.y[2], 32, 64);?