【发布时间】:2014-11-09 14:18:12
【问题描述】:
我问的原因是因为我得到了 NullPointerException。 我现在这很容易,但我是一个非常新的编程,发现这有点令人困惑。 假设我已经在一个类中初始化了一个对象,并想从另一个类访问同一个对象。
例如,我正在开发一个小型国际象棋游戏,在我的模型 Game 类中,我有一个 Board 实例,一个对象。反过来,Board 有一系列 Squares。方[][]。
游戏有棋盘,棋盘有 Square[][]。
现在,如果我想通过 Board 类型的对象板(在游戏中)访问 Square[][]。 我只是声明一个具有相同名称和类型的变量还是必须再次初始化它?
Board board OR Board board = new Board();
注意,我已经在 Game 类中初始化了棋盘,所以如果我再做一遍,它们会不会是两个完全不同的棋盘对象?
引用“board”的类:
public class View extends JFrame {
Board board;
JFrame gameWindow = new JFrame("Chess");
JPanel gamePanel = new JPanel();
JPanel[][] boardPanel = new JPanel[8][8];
JMenuBar gameMenu = new JMenuBar();
JButton newGame = new JButton("New game");
JButton pauseGame = new JButton("Pause");
JButton actionLog = new JButton("Action log");
View(){
gameWindow.setDefaultCloseOperation(EXIT_ON_CLOSE);
gameWindow.setSize(400, 400);
gameWindow.getContentPane().add(gamePanel);
gameWindow.setVisible(true);
gamePanel.setVisible(true);
gameMenu.add(newGame);
gameMenu.add(pauseGame);
gameMenu.add(actionLog);
for(JPanel[] row : boardPanel){
for(JPanel box : row){
gamePanel.add(box);
}
}
}
public void drawBoard(){
for(int y = 0; y < 8; y++){
for(int x = 0; x < 8; x++){
Box box = new Box();
box.setColour(board.getSquare(x, y).getColour());
box.setCol(x);
box.setRow(y);
box.repaint();
boardPanel[x][y].add(box);
}
}
}
}
class Box extends JComponent{
JPanel[][] boardPanel;
Board board;
Color boxColour;
int col, row;
public Box(){
repaint();
}
public void paint(Graphics drawBox){
drawBox.setColor(boxColour);
drawBox.drawRect(50*col, 50*row, 50, 50);
drawBox.fillRect(50*col, 50*row, 50, 50);
}
public void setColour(Color boxColour){
this.boxColour = boxColour;
}
public void setCol(int col){
this.col = col;
}
public void setRow(int row){
this.row = row;
}
}
...以及实例化“board”的类:
public class Game {
@SuppressWarnings("unused")
public static void main(String[] args)
throws Throwable{
Board board = new Board();
View view = new View();
}
}
这里发生异常:
for(JPanel[] row : boardPanel){
for(JPanel box : row){
gamePanel.add(box);
}
}
【问题讨论】:
-
你能把代码放在这里吗?带有定义的位置。
标签: java reference initialization nullpointerexception