java 添加按钮时出现空指针异常

java swing nullpointer exeption whilst adding buttons

所以我试图为一个学校项目做一个 java-swing-gui,因此我必须向 JPanel 元素添加 72 个按钮 (idk)。 我尝试使用 for 循环:

for (JButton btn : btns) {
    panel.add(btn);
}

但它并没有真正解决问题并引发了 nullPointerExeption。 有什么建议吗?

完整代码如下:

import javax.swing.*;
import javax.swing.plaf.DimensionUIResource;

import java.awt.*;

public class mädn extends JFrame{
    static JPanel panel = new JPanel();
    static JFrame frame = new JFrame();
    static JButton[] fields = new JButton[72];

    public static void main(String[] args) {
        new mädn();
    }

    public mädn() {
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(new DimensionUIResource(500, 500));
        frame.setTitle("Mensch Ärger Dich Nicht");

        panel.setLayout(new GridLayout(11, 11));
        panel.setBackground(Color.blue);
        
        for (JButton field : fields) {
            field.setSize(20, 20);
            panel.add(field);
        }

        frame.add(panel);
        frame.setVisible(true);
    }
}

当您创建这样的数组时:

static JButton[] fields = new JButton[72];

该数组为空。换句话说,即使该数组有能力保留 72 个按钮,但它还没有这些按钮,您必须手动添加它们,如下所示:

for (int i = 0; i < 72; i++) {
    fields[i] = new JButton();
}

但如果您不这样做,fields[i] 将默认为 null,因此当您尝试执行 field.setSize(20, 20) 时,该字段为空并会导致 NullPointerException.

原始数组也有默认值。比如int的数组元素都是0boolean的数组元素都是false。 non-primitive数组也是如此(如JButton),元素默认都是null.

您的最终代码将如下所示:

for (int i = 0; i < 72; i++) {
    fields[i] = new JButton();
    fields[i].setSize(20, 20);
    panel.add(fields[i]);
}

或:

for (int i = 0; i < 72; i++) {
    JButton field = new JButton();
    fields[i] = field;
    field.setSize(20, 20);
    panel.add(field);
}

甚至更短:

for (int i = 0; i < 72; i++) {
    var field = fields[i] = new JButton();
    field.setSize(20, 20);
    panel.add(field);
}

还可以考虑将 72 变成常量(static final 字段)。