【问题标题】:Why am I getting a NullPointerException in this loop?为什么我在这个循环中得到 NullPointerException?
【发布时间】:2013-09-05 22:33:05
【问题描述】:
else if(e.getSource()==button3){
JButton[] addSong = new JButton[50];
JLabel[] label = new JLabel[50];
JPanel[] smallPanel = new JPanel[50];
JPanel panel = new JPanel(new GridLayout(1,50));
for(int i=0;i<50;i++){
addSong[i].setText("+");
label[i].setText("Name of song");
smallPanel[i].add(addSong[i]);
smallPanel[i].add(label[i]);
panel.add(smallPanel[i]);
}
tabs.addTab("All Songs",panel);
}
for 循环中的所有语句都会给我一个 NullPointerException。我是 Java 新手 =/
【问题讨论】:
标签:
java
nullpointerexception
runtime-error
runtimeexception
【解决方案1】:
Object 数组中的元素默认为null。在尝试对其调用任何操作之前初始化所有数组的元素
for (int i=0; i < 50; i++){
addSong[i] = new JButton();
label[i] = new JLabel();
smallPanel[i] = new JPanel();
...
}
【解决方案2】:
创建对象数组时,数组中的元素全部初始化为null。您必须先创建对象并将其分配给数组中的一个元素,然后才能访问它并对其调用方法。
// Before calling a method on the array position...
label[i] = new JLabel();
// Then you can do this...
label[i].setText("Name of song");
其他数组也需要将它们的元素初始化为类似的实际对象。
【解决方案3】:
else if(e.getSource()==button3){
JButton[] addSong = new JButton[50];
JLabel[] label = new JLabel[50];
JPanel[] smallPanel = new JPanel[50];
JPanel panel = new JPanel(new GridLayout(1,50));
for(int i=0;i<50;i++){
addSong[i] = new JButton("+"); // creates a new button with text "+"
label[i] = new JLabel("Name of song"); // creates a new JLabel with text "Name of song"
smallPanel[i] = new JPanel();
smallPanel[i].add(addSong[i]);
smallPanel[i].add(label[i]);
panel.add(smallPanel[i]);
}
tabs.addTab("All Songs",panel);
}
这种行为的原因是因为默认情况下,在对象数组中(您使用 Type[] 创建,其中 Type 是 JPanel、JButton 和 JLabel 之一)所有记录确实是对象,但为空。
这意味着你告诉java“嘿,在这个数组中只有这个对象”,Java知道只有“对象”类型可以进入它的“空间”,但不知道什么样的对象。
这就是为什么对于数组中的每个“空格”(用 for 循环循环),您必须告诉 Java“这里有一个新的 JButton”(或 JPanel 或 JLabel)。就是这样:
arrayName[index] = new Type();