java - 尝试设置值时出现空指针异常

标签 java for-loop nullpointerexception

我正在制作一个名为 Spots 的对象数组,它们象征着骰子的不同面。

它接受用户输入(在本例中手动设置为 3),然后创建 Spots 并滚动一个从 1 到 6 的随机数。

但是,当我在已经创建的 Spots 数组上使用 rollAgain() 方法时,即使我在中使用相同的变量长度,我也会得到一个空指针两个 for 循环(一个创建点,一个滚动点)。

我的代码

全局变量

private Spots[] spots;

private int x = 3;

构造函数

  public Director(JFrame window, String args[]) {
    JMenuBar menus = new JMenuBar();
    window.setJMenuBar(menus);
    menus.add(makeFileMenu());

    window.getContentPane().add(makePanel(), BorderLayout.WEST);
    window.getContentPane().add(makeSpots(x), BorderLayout.CENTER);

    rollAgain();
}

rollAgain()方法

public void rollAgain() {
    int v = 1 + (int) (Math.random() * 6);
    for (int i = 0; i < x; i++) {
        spots[i].setValue(v);
    }
}

makeSpots()方法

private JComponent makeSpots(int x) {
    JPanel p = new JPanel();
    p.setBorder(BorderFactory.createTitledBorder("Dice"));

    Spots[] spots = new Spots[x];

    for (int i = 0; i < x; i++) {

        spots[i] = new Spots(200, 200);
        spots[i].setBorder(BorderFactory.createEtchedBorder());
        p.add(spots[i]);
    }
    return p;
}

最佳答案

您正在设置局部变量

Spots[] spots = new Spots[x];

这不会更改字段(恰好具有相同的名称)

private Spots[] spots;

最简单的解决方案是不使用局部变量

this.spots = new Spots[x];

关于java - 尝试设置值时出现空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24042681/

相关文章:

javascript - 语句仅在 for 循环中发生一次 - JavaScript

c - 对带有数组和嵌套 For 循环的程序中特定语句的作用感到困惑

java - HashMap返回NULL时如何处理异常

java - 设置值时出现 NullPointerException

java - 如何将 session 值传递给 java 中的另一个 Web 应用程序/项目

java - 如何在表格中输出素数

javascript - 是否可以稍微修改我的对称差分函数,以便它可以接受未知数量的参数?

java - 尝试在 webDriver 中使用 @FindBy 时出现 java.lang.NullPointerException

java - 如何让进度条 Swing 进度?

java - 在 Java 中使用 RegEx 时出现模式错误