簡體   English   中英

向JFrame添加JButton數組時出現NullpointerException

[英]Nullpointerexception when adding an array of JButtons to a JFrame

我正在使用(略微修改的)JButton克隆minesweeper。 因為掃雷中有太多游戲磁貼,所以我將它們存儲為數組。 當我嘗試使用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();
    }
}

好吧,您永遠不會初始化gamescreen變量,因此在這一行得到NullPointerException是完全正常的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM