gpt4 book ai didi

java - 为什么我在创建 Swing 组件时收到 NullPointerException?

转载 作者:行者123 更新时间:2023-12-01 15:57:59 25 4
gpt4 key购买 nike

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

Board 由此处的 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()方法中,有2个地方可能会导致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 数组创建新实例。因此,当您 add() 新框时,它将抛出 NullPointerException

如果您还可以告诉我们 View 类中的第 38 行,将会有更多帮助

关于java - 为什么我在创建 Swing 组件时收到 NullPointerException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4669382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com