我正在尝试制作一个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
知道为什么我得到那个例外吗?
答案 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)
您必须使用类似::
的内容初始化每个JPanelfor(int i = 0; i < 10; i++){
p2[i] = new JPanel();
}
对象数组和基本类型数组的行为方式不同。
虽然不需要在int
的堆上创建像float
和new
这样的数组类型的元素,但必须初始化对象数组。
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();
}
...
你的代码