2013-11-14 4 views
0

Я делаю клон тральщика с (слегка модифицированными) JButtons. Поскольку в тральщине так много игровых плит, я храню их как массив. Когда я пытаюсь добавить кнопки в рамку с помощью цикла for, я получаю на кнопках пустую кнопку. Класс ButtonObject расширяется из класса JButton только с двумя дополнительными переменными и методами getter/setter. Что происходит не так?Nullpointerexception при добавлении массива JButtons в JFrame

Код:

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

ответ

5

Ну, вы никогда не инициализировать переменную gamescreen, так что это совершенно нормально вы получите NullPointerException на этой линии.

+0

true. упс. извините за этот вопрос, это было довольно глупо от меня – imulsion

+0

@imulsion есть немые вопросы, но это было, конечно, не одно :) Также, если это правильный ответ, вы должны принять его – LionC

+0

@imulsion Это происходит. Иногда я добавляю элементы в неинициализированные коллекции. – Ron

Смежные вопросы