当前位置: 首页 > 知识库问答 >
问题:

为什么这段代码有错误:NullPointerException?

艾才良
2023-03-14

这段代码是我用Java Swing制作的Tic-Tac-Toe程序的一部分。为什么在添加用于添加按钮的for语句时返回NullPointerException?

import java.awt.*;
import java.awt.event.ActionListener;
import javax.swing.*;

public class TicTacToeGui extends JFrame
{
    public final static int r = 3;
    public final static int c = 3;
    TicTacToeGui()
    {   
         JButton[][] button = new JButton[3][3];
         JPanel panel = new JPanel();
         panel.setLayout(new GridLayout(r, c));
         JLabel label = new JLabel("This is a tic tac toe game.");
         for(int i = 0; i < r; i++)
         {
            for(int j = 0; j < c; j++)
            {
                panel.add(button[i][j]);
            }
         }
         this.add(label);
         this.add(panel);
         this.setSize(400, 400);
         this.setVisible(true);
         this.setDefaultCloseOperation(EXIT_ON_CLOSE);
     }


    public static void main(String [] args)
    {
        new TicTacToeGui();
    }
}

共有3个答案

劳彦
2023-03-14

JButton[][]按钮=new JButton[3][3];实际上并没有初始化按钮。你需要创建新的按钮,并把它们贴在这里。

龙俊德
2023-03-14

因为按钮[0][0]为空。您初始化数组,但不初始化其中的任何元素。

梁丘威
2023-03-14

你从不初始化任何JButton。当你申报时

JButton[][] button = new JButton[3][3];

它只会创建一个空的3x3数组null,您必须手动遍历数组中的每个点,并使用

button[row][col] = new JButton("");
 类似资料:
  • 令牌“if”的语法错误(应在此令牌之后 谢谢你的建议!

  • 问题内容: 考虑以下Java源代码: 该是。 为什么该语句有时会抛出? 谢谢。 问题答案: 线程安全 如果您的代码是多线程的,则有可能。例如: 如果在语句执行之后(但在循环之前)立即将另一个线程设置为,则您将获得一个。通过使用访问器(与延迟初始化结合使用)可以避免这种情况。 另外,如其他人所提到的,如果可能,请避免使用有利于泛型的此类循环构造。有关详细信息,请参见其他答案。 配件提供保护 如果始终

  • 问题内容: 我正在阅读有关ConcurrentModificationException以及如何避免它的信息。找到了一篇文章。该文章中的第一个清单具有与以下相似的代码,这显然会导致异常: 然后,它继续以各种建议解释如何解决该问题。 当我尝试重现它时,我没有遇到异常! 为什么我没有得到例外? 问题答案: 根据JavaAPI文档,Iterator.hasNext不会抛出。 检查后,您从列表中删除了一个

  • 假设我们有以下三个类: 这将产生以下错误: 既然是整数,为什么它不选择类型?

  • 错误:无法找到或加载主类MyGridLayout.MyGridLayout C:\users\home\AppData\local\netbeans\cache\8.2\executor-snippets\run.xml:53:Java返回:1构建失败(总时间:0秒)

  • 我想了解为什么一段代码不会抛出NullPointerException。 请考虑以下代码: 方法被重复调用,同时以下代码在单独的线程中运行: 只有一个实例。 从不引发NullPointerException。 但是,当方法暂停时,即使暂停0毫秒,也会按预期引发NullPointerException: 我的理解是,在理论上,在检查和调用之间存在竞争条件。在实践中,如果不引入暂停(即从后续方法调用中