Java - 创建JPanel数组会使空指针异常

时间:2012-10-21 16:39:47

标签: java arrays nullpointerexception jpanel

我正在尝试制作一个jpanels的数组,但我得到了一些null pointer exception

这是代码的一部分。这里的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

知道为什么我得到那个例外吗?

3 个答案:

答案 0 :(得分:3)

因为

JPanel[] p2 = new JPanel[10];

创建一个null JPanel指针数组。在使用之前,您需要初始化数组的每个元素。

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

这与任何数组初始化的行为一致。除非另有指定,否则数组的元素具有数组类型的默认值; for any object type, the default value is null

答案 1 :(得分:1)

您必须使用类似::

的内容初始化每个JPanel
for(int i = 0; i < 10; i++){
   p2[i] = new JPanel();
}

对象数组和基本类型数组的行为方式不同。

虽然不需要在int的堆上创建像floatnew这样的数组类型的元素,但必须初始化对象数组。

JPanel[] panels = new JPanel[10]为JPanel创建10个UNINITIALIZED对象(或者只是初始化数组)。由于它们尚未初始化,因此您必须在每个JPanel上调用new以单独初始化它们。

答案 2 :(得分:1)

JPanel[] p2 = new JPanel[10];

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

...

你的代码