Java 将JButton数组添加到JFrame时出现Nullpointerexception

Java 将JButton数组添加到JFrame时出现Nullpointerexception,java,swing,nullpointerexception,minesweeper,Java,Swing,Nullpointerexception,Minesweeper,我正在用(稍加修改的)JButtons复制一艘扫雷舰。因为扫雷舰上有这么多游戏牌,所以我将它们存储为一个数组。当我尝试使用for循环将按钮添加到帧时,按钮上会出现nullpointerexception。ButtonObject类是从JButton类扩展而来的,只使用了两个额外的变量和getter/setter方法。出什么事了 代码: import javax.swing.*; 导入java.awt.*; 导入java.awt.event.*; 导入java.util.Random; 公共类扫雷

我正在用(稍加修改的)JButtons复制一艘扫雷舰。因为扫雷舰上有这么多游戏牌,所以我将它们存储为一个数组。当我尝试使用for循环将按钮添加到帧时,按钮上会出现nullpointerexception。ButtonObject类是从JButton类扩展而来的,只使用了两个额外的变量和getter/setter方法。出什么事了

代码:

import javax.swing.*;
导入java.awt.*;
导入java.awt.event.*;
导入java.util.Random;
公共类扫雷器扩展JFrame实现ActionListener{
JLabel-starttitle;
ButtonObject[]雷场;
JFrame框架;
随机r=新随机();
国际兰特;
JPanel startscreen;
JPanel游戏屏幕;
智力游戏大小;
十号钮扣;
JButton-tfive;
杰布顿五十;
网格布局;
公共扫雷艇()
{
框架=新JFrame(“扫雷舰”);
框架。设置尺寸(500500);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setresizeable(false);;
startscreen=newjpanel();
startScreen();
}
公共无效startScreen()
{
十个=新的按钮(“10 x 10”);
tfive=新的按钮(“25 x 25”);
50=新的按钮(“50 x 50”);
starttitle=newjlabel(“欢迎使用扫雷舰。单击游戏大小开始”);
frame.add(开始屏幕);
startscreen.add(starttitle);
startscreen.add(十);
startscreen.add(tfive);
startscreen.add(五十);
十、添加ActionListener(本);
tfive.addActionListener(this);
50.增加行动听众(本);
}
公共无效初始值设定名称()
{
雷区=新按钮对象[游戏大小];

对于(int i=0;i好吧,你从来没有初始化过你的
gamescreen
变量,所以这是完全正常的,你在这一行得到一个
NullPointerException

好吧,你从来没有初始化过你的
gamescreen
变量,所以这一行得到一个
NullPointerException

真的。哦,很抱歉问题,这是相当愚蠢的me@imulsion有一些愚蠢的问题,但这肯定不是一个:)如果这是正确答案,您也应该接受it@imulsion这种情况经常发生。我偶尔会发现自己在未初始化的集合中添加元素。@RonE我认为这是一个事实,一开始没有正确初始化变量,这有时会让我想起>.true.oops。对不起,这个问题,这太愚蠢了me@imulsionT这里有一些愚蠢的问题,但这肯定不是一个:)如果这是正确的答案,你也应该接受it@imulsion这种情况经常发生。我偶尔会发现自己在未初始化的集合中添加元素。@RonE我认为这是一个事实,没有在开始时正确初始化变量,这有时会让我产生>。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Random;


public class Minesweeper extends JFrame implements ActionListener{

    JLabel starttitle;
    ButtonObject[] minefield;
    JFrame frame;
    Random r = new Random();
    int rand;
    JPanel startscreen;
    JPanel gamescreen;
    int gamesize;
    JButton ten;
    JButton tfive;
    JButton fifty;

    GridLayout layout; 



    public Minesweeper()
    {
        frame = new JFrame("Minesweeper");
        frame.setSize(500,500);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setResizable(false);;
        startscreen = new JPanel();
        startScreen();
    }

    public void startScreen()
    {
        ten = new JButton("10 x 10");
        tfive = new JButton("25 x 25");
        fifty = new JButton("50 x 50");
        starttitle = new JLabel("Welcome to minesweeper. Click a game size to begin.");
        frame.add(startscreen);
        startscreen.add(starttitle);
        startscreen.add(ten);
        startscreen.add(tfive);
        startscreen.add(fifty);
        ten.addActionListener(this);
        tfive.addActionListener(this);
        fifty.addActionListener(this);
    }
    public void initializeGame()
    {
        minefield = new ButtonObject[gamesize];
        for(int i = 0;i<gamesize;i++)
        {
            minefield[i]=new ButtonObject();
            rand = r.nextInt(5);
            if(rand==5)
            {
                minefield[i].setButtonType(true);//this tile is a mine
            }
        }
    }
    public void gameScreen()
    {
        frame.getContentPane().removeAll();
        frame.repaint();
        initializeGame();
        for(int i = 0;i<minefield.length;i++)
        {
            gamescreen.add(this.minefield[i]);//EXCEPTION HERE
        }

    }
    public void actionPerformed(ActionEvent e)
    {
        if(e.getSource()==ten)
        {
            gamesize = 99;
            gameScreen();
        }
        else if(e.getSource()==tfive)
        {
            gamesize = 624;

            gameScreen();
        }
        else if(e.getSource()==fifty)
        {
            gamesize = 2499;

            gameScreen();
        }
        else
        {
            System.out.println("Fatal error");
        }

    }
    public static void main(String[] args)
    {
        new Minesweeper();
    }
}