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