为什么我在这个循环中得到NullPointerException?

时间:2013-09-05 22:33:06

标签: java nullpointerexception runtime-error runtimeexception

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 = /

的新手

3 个答案:

答案 0 :(得分:0)

默认情况下,Object数组中的元素为null。在尝试调用所有数组的任何操作之前初始化所有数组的元素

for (int i=0; i < 50; i++){
   addSong[i] = new JButton();
   label[i] = new JLabel();
   smallPanel[i] = new JPanel();
   ...
}

答案 1 :(得分:0)

创建对象数组时,数组中的元素都被初始化为null。您必须创建对象并将其分配给数组中的元素,然后再访问它并在其上调用方法。

// Before calling a method on the array position...
label[i] = new JLabel();
// Then you can do this...
label[i].setText("Name of song");

其他数组需要将它们的元素初始化为实际对象。

答案 2 :(得分:0)

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);
  }

这种行为的原因是因为默认情况下,在一个Object数组中(使用Type []创建,其中Type是JPanel,JButton和JLabel之一)所有记录都是Objects,但为null。

这意味着你正在告诉java“嘿,在这个数组中只有这个对象”,Java知道只有“Object”类型可以进入它的“空格”但不知道是什么类型的对象。

这就是为什么对于数组中的每个“空格”(循环使用for循环),你必须告诉Java“这里去一个新的JButton”(或JPanel,或JLabel)。这就是方法:

arrayName[index] = new Type();