将JButton数组添加到JFrame时的Nullpointerexception

时间:2013-11-14 12:39:09

标签: java swing nullpointerexception minesweeper

我正在使用(略微修改过的)JButton来复制扫雷。因为扫雷中有很多游戏牌,所以我将它们存储为阵列。当我尝试使用for循环将按钮添加到Frame时,我会在按钮上获得nullpointerexception。 ButtonObject类是从JButton类扩展而来的,只有两个额外的变量和getter / setter方法。出了什么问题?

代码:

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();
    }
}

1 个答案:

答案 0 :(得分:5)

好吧,你永远不会初始化你的gamescreen变量,所以你在这一行得到NullPointerException是完全正常的。