【问题标题】: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();
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-01-29
          • 1970-01-01
          • 2012-04-04
          • 1970-01-01
          • 1970-01-01
          • 2021-06-20
          相关资源
          最近更新 更多