2012-09-03 46 views
2

我宣佈:新Java中獲得NullPointerException異常

Discursiva[] questoesDiscursivas = new Discursiva[10]; 

那就是:

public class Discursiva extends Questao{ 
    private String criteriosCorrecao; 
} 

而且Questao是:

public class Questao { 
    private String pergunta; 
    private double peso; 
} 

所以我只是做:

str = JOptionPane.showInputDialog("Pergunta da Questao:"); 
questoesObjetivas[i].setPergunta(str); 

得到了java.lang.NullPointerException。

我已閱讀oracle docs:在應用程序嘗試使用 null在需要對象的情況下拋出。這些措施包括:

Calling the instance method of a null object. 
Accessing or modifying the field of a null object. 
Taking the length of null as if it were an array. 
Accessing or modifying the slots of null as if it were an array. 
Throwing null as if it were a Throwable value. 

而且我不知道爲什麼我收到NullPointerException。 請不要低估我的問題,Iam仍在學習Java,它像我的第一個代碼一樣,我希望得到你的幫助,所以請,我該如何解決這個問題?

+1

你在哪裏初始化'questoesObjetivas'? –

+0

什麼是'questoesObjetivas',它有多大,拋出異常時'i'的值是多少? –

+0

這將有助於查看所有您正在使用的代碼,或者至少setPergunta(String)函數中的代碼是什麼 –

回答

3

之前做這個questoesObjetivas[i]先做這個

questoesObjetivas[i] = new Discursiva(); 

你會發現在here.

陣列的好文章則只有聲明中對象的數組objects.Each值的數組包含對象只引用被初始化爲空。所以,當您嘗試訪問它,你會得到NullPointerException

因爲數組在本質上covariant[if Sub is a subtype of Super, then the array type Sub[] is a subtype of Super[] **Effective Java**]一個應該更喜歡ArrayList

ArrayList<Discursiva> questoesDiscursivas = new ArrayList<Discursiva>(10); 
questoesDiscursivas.add(new Discursiva()); 

可以在有效的Java閱讀更多Item 25: Prefer lists to arrays

+0

我只是不知道爲什麼我必須再次聲明它,因爲我已經這樣做了: Discursiva [ ] questoesDiscursivas = new Discursiva [10]; –

+0

可能看起來很奇怪,但你只是分配了數組。所有值默認設置爲空。 – Resh32

+0

嗯,感謝它的工作,仍然需要11分鐘來接受awnser,但是謝謝 –

2

您需要在陣列中創建對象:

Discursiva[] questoesDiscursivas = new Discursiva[10]; 

for (int i=0;i<10;i++){ 
    questoesDiscursivas = new Discursiva(); 
} 
6

您的陣列充滿了null s。

您需要在陣列的每個插槽中放置一個new Discursiva(),然後才能使用它。

+0

+1告訴hime如何避免'NPE',因爲他是java中的新人。他永遠不應該得到'NPE'。 –

0

在創建時,所有的對象陣列的元件被初始化爲null,所以questoesObjetivas[i].setPergunta(str)將給出一個NullPointerException因爲該陣列的i個元素確實null。嘗試使用Discursiva類的實例填充陣列。

0

猜測的問題是你給的兩行:

questoesObjetivas[i]爲空或questoesObjetivas爲null

0

需要instanitate對象,所以你可以把它inyour陣:

questoesObjetivas[i] = new setPergunta(str); 
1

你已經聲明questoesObjetivas [i],但沒有初始化它。

相關問題