0

の配列を作成しようとしていますjpanelsが、いくつか取得しnull pointer exceptionました。

これがコードの一部です。ここcartPにありpanelます。

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

なぜ私がその例外を受け取るのか考えていますか?

4

3 に答える 3

3

なぜなら

JPanel[] p2 = new JPanel[10];

null JPanelポインタの配列を作成します。配列を使用する前に、配列の各要素を初期化する必要があります。

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

これは、アレイの初期化の動作と一致しています。特に割り当てられない限り、配列の要素には配列タイプのデフォルト値があります。どのオブジェクトタイプでも、デフォルト値はですnull

于 2012-10-21T16:40:41.833 に答える
1

次のようなもので各 JPanel を初期化する必要があります::

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

オブジェクトの配列とプリミティブ型の配列は、異なる方法で動作します。

intやのような配列型の要素は でfloatヒープ上に作成する必要はnewありませんが、オブジェクトの配列を初期化する必要があります。

JPanel[] panels = new JPanel[10]JPanel 用に 10 個の UNINITIALIZED オブジェクトを作成します (または単に配列を初期化します)。newこれらは初期化されていないため、各 JPanel を呼び出して個別に初期化する必要があります。

于 2012-10-21T16:42:00.680 に答える
1
JPanel[] p2 = new JPanel[10];

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

....

あなたのコード

于 2012-10-21T16:42:25.247 に答える