【问题标题】:NullPointerException when filling an array in GridLayout在 GridLayout 中填充数组时出现 NullPointerException
【发布时间】:2014-04-05 02:53:18
【问题描述】:

我遇到了 NullPointerException 问题,这是

的结果
public class Grid extends JFrame {

private JLabel[][] grid;

public Grid(int max) { //from Constructor
    int s = max;
    int v = max;


    Container cont = getContentPane();
    cont.setLayout(new BorderLayout());

    JPanel p1 = new JPanel(new BorderLayout());
    Container content = new JPanel(new GridLayout(s,v)); 

    for (int y = s - 1; y >= 0; y--) {
        for (int x = 0; x < v; x++) {
            grid[x][y] = new JLabel((x)+","+(y));
            content.add(grid[x][y]);
        }
    }

我已尝试将此预览中的代码简化为重要部分。错误是由

引起的
    grid[x][y] = new JLabel((x)+","+(y));

在一天结束时,我想将特定数量(最大*最大)的 JLabels 添加到 GridLayout 中,其中包含坐标,就像 for 子句应该给它们一样。还有这里:GridLayout coordinates

【问题讨论】:

  • 看起来“网格”从未初始化,因此是 NPE。

标签: java arrays swing nullpointerexception


【解决方案1】:

您的数组未初始化,您必须先构造数组,然后再为其元素赋值。

private JLabel[][] grid = new JLabel[MAX][MAX]; 

【讨论】:

  • 感谢您的回答。我认为这将是解决方案,但有一个问题。我无法在 Grid 类中初始化网格,因为我需要给定的值是构造函数。但是当我试图在构造函数中初始化网格数组时,eclipse返回'Illegal modifier for paramter grid;只允许决赛”。我忘了提到有一个 super("Title");在一开始的构造函数中,对此感到抱歉!
  • 如果要在构造函数中分配数组,grid = new JLabel[v][s]; 有效吗?
  • 谢谢,现在可以了!我已经用'private JLabel[][] grid;'在构造函数上方的类中声明了数组;然后用 'grid = new JLabel[v][s];' 对其进行初始化在构造函数中。
猜你喜欢
  • 2013-04-08
  • 2013-11-26
  • 2018-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-31
  • 2023-03-13
相关资源
最近更新 更多