Java 为什么这会导致空指针异常?

Java 为什么这会导致空指针异常?,java,initialization,Java,Initialization,我有以下代码: public class Sprite { protected float x; protected float y; protected Image image; protected Rectangle boundingBox; Sprite(float x, float y, Image image) { this.x = x; this.y = y; this.image = imag

我有以下代码:

public class Sprite {
    protected float x;
    protected float y;
    protected Image image;
    protected Rectangle boundingBox;

    Sprite(float x, float y, Image image) {
        this.x = x;
        this.y = y;
        this.image = image;
        boundingBox = new Rectangle(x, y, 
            this.image.getWidth(), this.image.getHeight());
    }

但是,一旦定义并初始化了sprite对象,我在另一个类中调用此函数时:

public static boolean collides(Sprite object1, Sprite object2) {
    return object1.getBoundingBox().intersects(object2.getBoundingBox());
}
我得到一个空指针异常,指向包含以下内容的行:

this.image.getWidth(), this.image.getHeight());

为什么会这样?

检查图像是否为空。这很可能是错误的来源。

检查图像是否为空。这很可能就是错误的来源。

在某个地方,您正在创建一个
精灵,并向构造函数传递一个空图像。在构造器中,尝试这样做


if(image==null)抛出新异常(“无法使用null image创建精灵”)

您正在创建一个
精灵并向构造函数传递一个null映像。在构造器中,尝试这样做


if(image==null)抛出新异常(“无法使用null image创建精灵”)

如果
image
null
,则会发生这种情况。您必须在代码的某个地方拨打此电话:

new Sprite(aFloat, anotherFloat, aNullValue); // aNullValue == null

您可能希望添加一些
null
检查抛出
运行时异常的构造函数。这将很容易找到在
null
图像中传递的代码
如果
图像
null
,则会发生这种情况。您必须在代码的某个地方拨打此电话:

new Sprite(aFloat, anotherFloat, aNullValue); // aNullValue == null


您可能希望添加一些
null
检查抛出
运行时异常的构造函数。这将使查找传入
null
Image

的代码变得很容易,但该图像不是null,因为它已被定义。@Deza-也许您可以在构造函数中使用
null
初始化它。参数图像?您将展示这个.image.getWidth()/getHeight()是NPE的来源,唯一的逻辑解决方案是A)这是null,这永远不会发生,或者B)这是null。如果image为空,则this.image可以为空。@Deza:您100%确定吗?您是否调用了
println(“image null?”+(image==null))null
初始化它。参数图像?您将展示这个.image.getWidth()/getHeight()是NPE的来源,唯一的逻辑解决方案是A)这是null,这永远不会发生,或者B)这是null。如果image为空,则this.image可以为空。@Deza:您100%确定吗?您是否调用了
println(“image null?”+(image==null))Sprite
构造函数的位置。您确定调用的是正确的Sprint构造函数,而不是没有参数的默认构造函数吗?是否确保传入的映像在构造函数中不为null?我会添加类似于
if(image!=null){this.image=image}或者{image=newimage()}您还需要确保图像中的x和y也不为null。如果遇到NullPointerException,请始终提供堆栈跟踪。。。使用调试器找出哪个变量真正为空。为什么接受hvgotcodes而不是Nicholas的答案?尼古拉斯事实上是正确的,而且是第一个。为什么您没有回答我们的任何评论/问题?将代码张贴在调用
Sprite
构造函数的位置。您确定调用的是正确的Sprint构造函数,而不是没有参数的默认构造函数吗?是否确保传入的映像在构造函数中不为null?我会添加类似于
if(image!=null){this.image=image}或者{image=newimage()}您还需要确保图像中的x和y也不为null。如果遇到NullPointerException,请始终提供堆栈跟踪。。。使用调试器找出哪个变量真正为空。为什么接受hvgotcodes而不是Nicholas的答案?尼古拉斯事实上是正确的,而且是第一个。为什么你没有回答我们的任何评论/问题?