2013-05-03 268 views
0

FavPic是一个数组,其中存有一个图片元素,im试图设置变量pRef等于该数组元素。相反,我不断收到空指针异常崩溃。什么是空指针异常,以及这几行代码如何导致这样的事情?谢谢!空指针异常

public void setFavouritePicture (Picture pRef) 
    { 
    pRef = favPic[0]; 
    } 
+0

这意味着你永远不会初始化数组。 – 2013-05-03 16:59:30

+0

使用'favpic = new Picture [size];' – 2013-05-03 17:00:42

+1

初始化数组好像听起来非常像'favPic'实际上是一个空引用,如果该行失败。不幸的是,您给我们的背景很少,我们无法说的更多。请注意,更改'pRef'的值无论如何都不会做任何事情。假设这是一个* set *方法,你不应该把'favPic [0]'设置为'pRef'吗? – 2013-05-03 17:00:55

回答

0

NullPointerException意味着你尝试调用上被参照null(更常见的)一个对象引用的方法,或类似的在这里,试图引用指的是null阵列的特定元素。

它只需要2行代码就会导致NullPointerException - 一个声明参考变量,以便它的null,以及一个尝试使用它的东西。

在使用它之前,您必须创建您的数组来初始化它。

+0

我做了初始化,这是奇怪的事情。 http://pastebin.com/kcGWZWgt多数民众赞成在代码即时工作 – Alex 2013-05-03 17:10:31

+0

除了代码,请为NullPointerException添加堆栈跟踪。我们没有你使用的其他类的代码,这使得很难分辨出什么问题(例如,在哪里调用setFavoritePic()?)。 – Elist 2013-06-23 08:36:37

0

A NullPointerException当something为null或undefined时被调用。您要么尝试从未声明的数组中获取值,要么尝试从尚未定义的数组中获取值。

例如,如果我有一个int[]包含1,2和3,并且我尝试说System.out.println(int[3]),它将无法工作,因为没有值。

运行以下检查,让我知道你会得到什么:

System.out.println(favPic == null);

System.out.println(favPic[0] == null);

+0

在我的代码中,我相信我初始化了这个数组。如果您想要http:// pastebin,请随时查看。com/kcGWZWgt – Alex 2013-05-03 17:15:52

+0

在你的'setFavouritePic'方法中,添加这两行代码并告诉我你得到了什么。我们正在寻找两个错误。 – nrubin29 2013-05-03 17:25:10

0

当您尝试访问该值null(也可能不被物业初始化的对象,也可以手动分配值null)。

在你的情况下,数组favPic可能null所以当您尝试使用favPic[0],它不能访问的favPic的第一个值,并抛出NullPointerException

0

在你main,你应该有这样的事情

Picture[] favPic = new Picture [1];// 1 is the number of pics 
favPic = setFavouritePicture(favPic); 

和你setFavouritePicture方法应该是这个样子

public static Picture[] setFavouritePicture (Picture[] pRef){ 
    for (int i = 0; i < pRef.length; i++) { 
     pRef[i] = new Picture(); 
    } 
    pRef[0] = ... ; // "..." is your picture 
    return pRef; 
}