我有一个充满几个按钮的数组,我试图通过数组并给每个按钮一个颜色,但我不断得到一个零点异常错误。
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开始,所以你永远不会将arrayButtons[0]
设置为任何东西,因为null
也称为等待在调用时抛出NullPointer。你也永远不会初始化btn4
,它会在被调用时抛出一个空指针,最后你为什么要创建一个33按钮数组,当你只初始化3时其他人会抛出你想猜它是一个NPE
试试这个
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();
您只初始化了数组中的少数元素。其他引用为null。
更改此行代码
public static Button[] arrayButtons = new Button[33];
至
public static Button[] arrayButtons = new Button[4];
请注意,数组从索引0开始!