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 回答