空指针异常数组[重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了空指针异常数组[重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

我练习了实现扫雷的javafx应用程序。我摘录了代码以找出问题所在。在代码中,我读入了一个javafx.scene.control.Button类型的对象数组。在另一个类中,我读出了这个数组。就像在每个javafx应用程序中一样,整个应用程序类汇集在一起​​。编译工作。我运行Programm时得到nullPointerException。这是我的问题。可能Array不包含任何对象。顺便说一句,我使用分离的类,因为练习包含在模型 - 视图 - 控制器Designpattern中。

import javafx.scene.control.Button;

public class GameButton extends Button {

   public static GameButton[][] buttons = new GameButton[3][4];

   public GameButton() {
      for (int x = 0; x < buttons.length; x++) {
         for (int y = 0; y < buttons[x].length; y++) {
            buttons[x][y] = new GameButton();   //Read in the array
         }
      }
   }
}

import javafx.scene.layout.GridPane;

public class View extends GridPane {
   public View() {

      for (int x = 0; x<GameButton.buttons.length; x++) {
         for (int y = 0; y<GameButton.buttons[x].length; y++) {
            this.add(GameButton.buttons[x][y], x, y);// Read out the array
         }
      }
   }
}

import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;

public class Main extends Application {

   public void start(Stage stage) {
      View view = new View();
      Scene scene = new Scene(view);
      stage.setTitle("Minesweeper");
      stage.setScene(scene);
      stage.show();
   }

   public static void main(String[] args) {
      launch(args);
   }
}
答案

GameButton数组中的所有按钮都为null,您将它们添加到View中。它们将在那里使用,最终导致NPE。

解决方案:不要使数组静态,而是实例化您的类。

import javafx.scene.layout.GridPane;

public class View extends GridPane {
    public View() {

        GameButton gb = new GameButton();

        for (int x = 0; x < gb.buttons.length; x++) {
            for (int y = 0; y < gb.buttons[x].length; y++) {
                this.add(gb.buttons[x][y], x, y);// Read out the array
            }
        }
    }
}

我不确定你想在这做什么

import javafx.scene.control.Button;

public class GameButton extends Button {

    public Button[][] buttons = new Button[3][4];

    public GameButton() {
        for (int x = 0; x < buttons.length; x++) {
            for (int y = 0; y < buttons[x].length; y++) {
                buttons[x][y] = new Button();   //Read in the array
            }
        }
    }
}

以上是关于空指针异常数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章

空指针异常数组[重复]

在tablayout片段之间进行通信[重复]

奇怪的java字符串数组空指针异常[重复]

片段中的空指针异常

为什么我得到一个对象数组的空指针异常? [重复]

片段 getArguments() 空指针异常