尝试为数组中的按钮赋予颜色时数组中的空点错误

时间:2019-03-27 20:31:42

标签: java arrays javafx nullpointerexception scenebuilder

我有一个充满几个按钮的数组,我试图遍历该数组并为每个按钮赋予一种颜色,但是我一直收到空点异常错误。

   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
      }
  } 

当我为每个循环尝试为所有按钮赋予内部颜色时,会发生错误。

2 个答案:

答案 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开始!