我有一个充满几个按钮的数组,我试图遍历该数组并为每个按钮赋予一种颜色,但是我一直收到空点异常错误。
public static Button[] arrayButtons = new Button[33];
@FXML public Button btn1 = new Button();
@FXML public Button btn2 = new Button();
@FXML public Button btn3 = new Button();
@FXML
public void initializeButtonArray() {
arrayButtons[1] = btn1;
arrayButtons[2] = btn2;
arrayButtons[3] = btn3;
arrayButtons[4] = btn4;
}
@FXML
private void test() {
initializeButtonArray();
for(Button btn : arrayButtons) {
btn.setStyle("-fx-background-color: #FF0000"); //error occurs here
}
}
当我为每个循环尝试为所有按钮赋予内部颜色时,会发生错误。
答案 0 :(得分:2)
数组从0开始,因此您永远不会将arrayButtons[0]
设置为任何值,而将其保留为null
,也就是在调用时等待抛出NullPointer。您也永远不会初始化btn4
,它在被调用时会抛出一个空指针,最后为什么当您只初始化3个而其他人会抛出一个您想猜测它的NPE时会创建一个33个按钮的数组
尝试
public static Button[] arrayButtons = new Button[4];
public void initializeButtonArray() {
arrayButtons[0] = btn1;
arrayButtons[1] = btn2;
arrayButtons[2] = btn3;
arrayButtons[3] = btn4;
}
添加此
@FXML public Button btn4;
在您第一次通过arrayButtons循环进行迭代时,它会抛出一个空指针,因为它正在寻找arrayButtons[0]
,但将其设置为null
会破坏整个循环
如果您引用的是FXML,则不要放置= new Button();
答案 1 :(得分:1)
您仅初始化了数组中的几个元素。其他都指向null。
更改此代码行
public static Button[] arrayButtons = new Button[33];
到
public static Button[] arrayButtons = new Button[4];
请注意,数组从索引0开始!