Ошибка нулевой точки в массиве при попытке дать цвет кнопкам в массиве - PullRequest
0 голосов
/ 27 марта 2019

У меня есть массив, заполненный несколькими кнопками, и я пытаюсь просмотреть массив и дать каждой кнопке цвет, однако я получаю ошибку исключения из нулевой точки.

   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 ]

2 голосов
/ 27 марта 2019

Массивы Начинаются с 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();

1 голос
/ 27 марта 2019

Вы инициализировали только несколько элементов в массиве. Другие ссылаются на ноль.

Изменить эту строку кода

public static Button[] arrayButtons = new Button[33];   

до

public static Button[] arrayButtons = new Button[4];   

Обратите внимание, что массивы начинаются с индекса 0!

...