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
的数组元素都是0
,boolean
的数组元素都是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
字段)。
所以我试图为一个学校项目做一个 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
的数组元素都是0
,boolean
的数组元素都是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
字段)。