簡體   English   中英

為什么創建Swing組件時會出現NullPointerException?

[英]Why am I getting a NullPointerException when creating a Swing component?

創建Box對象時發生錯誤。

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

棋盤是由Game構造函數(另一個類)提供的:

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

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

因此,在遍歷數組時,它使用兩個整數作為坐標來創建Box。 引用坐標,然后運行repaint()。 該框還將使用兩個整數從Board類的Square中獲取顏色。 由於已經設置了顏色,因此在運行drawBoard(board)方法之前,應該不會有問題吧?

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

在您的drawBoard()方法中,有兩個地方可能會導致NullPointerException

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

如果board為null,或者getSquare的結果為null,那么您將看到一個NPE。

另一個區域,人們拋出NullPointerExceptions的一個很常見的地方是

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

由於您沒有向我們展示如何聲明它,因此我將假設以下內容,您已經創建了一個JPanel,在此面板中,您尚未為8x8數組創建新實例。 因此,當您添加()新框時,它將拋出NullPointerException

如果您還可以告訴我們您的View類中的第38行會有所幫助

一個猜測,因為您沒有提供完整的源代碼-但是對於循環,您似乎已經在行和列的數量上進行了硬編碼,但是對於聲明2D網格數組,您使用了兩個常量。

根據您對getSquare的實現,以及這些常量是否與您的硬編碼值不同,這可能是導致問題的原因。

暫無
暫無

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

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