2012-10-21 21 views
0

我試圖做一個jpanels的數組,但我得到了一些null pointer exceptionJava - 創建JPanel數組使空指針異常

這裏是代碼的一部分。這裏的cartPpanel

JPanel[] p2 = new JPanel[10]; 
    p2[0].setPreferredSize(new Dimension(700, 40)); 
    p2[0].setMaximumSize(p2[0].getPreferredSize()); 
    p2[0].setLayout(new GridLayout(1,5,1,1)); 
    p2[0].add(new JLabel("text")); 
    p2[0].add(new JLabel("text")); 
    p2[0].add(new JLabel("text")); 
    p2[0].add(new JLabel("text")); 
    p2[0].setBackground(Color.CYAN); 

    cartP.add(p2[0]); 

我會用它來製作購物車,就像在購物網站上一樣。

這裏是例外..

Exception in thread "main" java.lang.NullPointerException 
at storeapp.Cart.gui(Cart.java:59) 
at storeapp.Cart.<init>(Cart.java:29) 
at storeapp.Cart.main(Cart.java:157) 

Java結果:1

任何想法,爲什麼我得到異常?

回答

1

你有這樣的事情::

for(int i = 0; i < 10; i++){ 
    p2[i] = new JPanel(); 
} 

對象數組和原始類型的數組行爲以不同的方式初始化每個JPanel的。

雖然不是必需的像intfloat陣列類型的元素與new要在堆上創建的,則必須初始化對象的數組。 (或剛剛初始化數組)。由於它們未初始化,因此您必須在每個JPanel上分別調用new來初始化它們。

+0

_ 「......創建10個未初始化的對象」 _是一個誤導性的句子。沒有「未初始化的對象」這樣的事物,只有變量和沒有被初始化的引用。在[a] JPanel上聲明_「call'new'也是誤導/不正確的。」_你並沒有調用一個方法,也沒有將一個運算符應用到現有對象上。 –

3

由於

JPanel[] p2 = new JPanel[10]; 

創建的nullJPanel指針的數組。在使用之前,您需要初始化數組中的每個元素。

for (int i=0; i<p2.length; i++) { 
    p2[i] = new JPanel(/* snip */); 
} 

這是與任何數組初始化的行爲是一致的。在另外分配之前,數組的元素具有數組類型的默認值; for any object type, the default value is null

1
JPanel[] p2 = new JPanel[10]; 

for (int i = 0; i < p2.length; i++){ 
    p2[i] = new JPanel(); 
} 

....

代碼

+0

你也可以添加一些信息。爲什麼和在哪裏做這些改變? –

+0

判斷我的帖子應該高於作者代碼。 –