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))或者在抛出NPE的代码行之前有类似的意思?这正是气垫船所说的。检查image和this.image是否为null(尽管它们指向相同的位置)。做一个简单的打印。这是它抛出此错误的唯一原因。但是图像不是空的,因为它已被定义。@Deza-也许您可以在构造函数中用null
初始化它。参数图像?您将展示这个.image.getWidth()/getHeight()是NPE的来源,唯一的逻辑解决方案是A)这是null,这永远不会发生,或者B)这是null。如果image为空,则this.image可以为空。@Deza:您100%确定吗?您是否调用了println(“image null?”+(image==null))或者在抛出NPE的代码行之前有类似的意思?这正是气垫船所说的。检查image和this.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的答案?尼古拉斯事实上是正确的,而且是第一个。为什么你没有回答我们的任何评论/问题?