2011-01-12 23 views
0

創建Box對象時發生錯誤。爲什麼在創建Swing組件時收到NullPointerException?

public void drawBoard(Board board){ 
    for(int row = 0; row < 8; row++){ 
     for(int col = 0; col < 8; col++){ 
      Box box = new Box(board.getSquare(col, row).getColour(), col, row); 
      squarePanel[col][row].add(box); 
     } 
    } 

局從遊戲構造這裏(其他類)給出:

public Game() throws Throwable{ 
    View graphics = new View(); 
    board = new Board(); 
    board.setDefault(); 
    graphics.drawBoard(board); 
} 

董事會構造是這樣的:

public Board(){ 
    grid = new Square[COLUMNS][ROWS]; 
    for(int row = 0; row < 8; row++){ 
     for(int col = 0; col < 8; col++){ 
      grid[col][row] = new Square(this); 
     } 
    } 
    for(int row = 0; row < 8; row++){ 
     for(int col = 0; col < 4; col++){ 
      int odd = 2*col + 1; 
      int even = 2*col; 
      getSquare(odd, row).setColour(Color.BLACK); 
      getSquare(even, row).setColour(Color.WHITE); 
     } 
    } 
} 

最後Box類:

class Box extends JComponent{ 
Color boxColour; 
int col, row; 
public Box(Color boxColour, int col, int row){ 
    this.boxColour = boxColour; 
    this.col = col; 
    this.row = row; 
    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); 
    } 
} 

因此, e遍歷數組,它使用兩個整數作爲座標來創建Box。 引用座標,然後運行repaint()。 這個盒子也從Board類中的Square中獲得使用這兩個整數的顏色。 由於顏色已經設置好,所以在drawBoard(板)方法運行之前,這應該不成問題,對吧?

Exception in thread "main" java.lang.NullPointerException 
    at View.drawBoard(View.java:38) 
    at Game.<init>(Game.java:21) 
    at Game.main(Game.java:14) 

Square

import java.awt.Color; 

public class Square { 

    private Piece piece; 
    private Board board; 
    private Color squareColour; 

public Square(Board board){ 
    this.board = board; 
} 

public void setColour(Color squareColour){ 
    this.squareColour = squareColour; 
} 

public Color getColour(){ 
    return squareColour; 
} 
+2

你能提供的堆棧跟蹤與NullPointerException異常的它? – 2011-01-12 13:40:12

+0

不知道,是在控制檯中的錯誤? – 2011-01-12 13:44:22

+0

@Alex,是的,啓動「java.lang.NullPointerException」並且有一堆行號的東西 - 所有這些。 – justkt 2011-01-12 13:46:18

回答

1

在你drawBoard()方法中,有2個地方可能會導致空指針異常

Box box = new Box(board.getSquare(col, row).getColour(), col, row); 

,如果董事會是空,或getSquare的結果爲空,那麼你將看到一個NPE。

其他區域,一個很普通的地方的人拋出NullPointerException異常是

squarePanel[col][row].add(box); 

因爲你還沒有告訴我們如何聲明這一點,我將承擔以下,你必須創建一個JPanel,在此面板中你尚未爲8x8陣列創建新的實例。所以,當你添加()的新盒子,它會拋出NullPointerException異常

這將幫助更多的,如果你還可以告訴我們38是什麼線在你View

0

,因爲你沒有提供完整的源猜測相關部分 - 但對於循環,你似乎在行數和列數已硬編碼,但爲了聲明2D網格數組,你已經使用了兩個常量。

取決於您的getSquare的實現,如果這些常量與硬編碼值不同,那可能是導致問題的原因。

相關問題