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].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 新手 =/

4

3 回答 3

0

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

for (int i=0; i < 50; i++){
   addSong[i] = new JButton();
   label[i] = new JLabel();
   smallPanel[i] = new JPanel();
   ...
}
于 2013-09-05T22:34:17.157 回答
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");

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

于 2013-09-05T22:34:42.420 回答
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);
  }

这种行为的原因是因为默认情况下,在对象数组中(您使用 Type[] 创建,其中 Type 是 JPanel、JButton 和 JLabel 之一)所有记录确实是对象,但为空。

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

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

arrayName[index] = new Type();
于 2013-09-05T22:42:06.873 回答