Java 带有ArrayList的NullPointerException<;JPanel>;计算器图形用户界面

Java 带有ArrayList的NullPointerException<;JPanel>;计算器图形用户界面,java,arrays,arraylist,jpanel,jlabel,Java,Arrays,Arraylist,Jpanel,Jlabel,我正在设计一个计算器控制台,它将接收两个值,创建一个类AdditionProblem的新实例,该实例将返回问题的两个加数的JLabel数组、总和以及从每个位置携带的量(它显示了工作)。我有一个扩展JPanel的自定义类,还有一个JPanel的ArrayList,表示单击add按钮后已解决问题的每一行。AdditionProblem类与主类一样工作正常。在创建console类以显示答案后单击addition按钮时,在第44行“row.add(new JPanel)”上会出现空指针异常。如果您需要查

我正在设计一个计算器控制台,它将接收两个值,创建一个类AdditionProblem的新实例,该实例将返回问题的两个加数的JLabel数组、总和以及从每个位置携带的量(它显示了工作)。我有一个扩展JPanel的自定义类,还有一个JPanel的ArrayList,表示单击add按钮后已解决问题的每一行。AdditionProblem类与主类一样工作正常。在创建console类以显示答案后单击addition按钮时,在第44行“row.add(new JPanel)”上会出现空指针异常。如果您需要查看我的其余代码,请让我知道,我将发布它,但为了节省时间,我将只发布Console类,因为在我将代码移到此类之前,其他类一直工作正常

package Main;

import java.awt.Color;
import java.awt.Dimension;
import java.util.ArrayList;

import javax.swing.BoxLayout;
import javax.swing.JLabel;
import javax.swing.JPanel;

import Aritmathic.AdditionProblem;

public class Console extends JPanel {

private int width = 230, height = 260;
private ArrayList<JPanel> rows;
private ArrayList<JLabel> columns;

private void init(){

    this.setPreferredSize(new Dimension(width, height));
    this.setBackground(Color.WHITE);
    this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));

}

public Console(){

    init();

}

public void printAnswer(AdditionProblem problem){

    int rowIndex = 0;

    JLabel[] sumLabels = problem.getSumLabels();
    JLabel[] addend1Labels = problem.getAddend1Labels();
    JLabel[] addend2Labels = problem.getAddend2Labels();
    JLabel[] carriedLabels = problem.getCarriedLabels();

    rows.add(new JPanel());

    for(int i = 0; i < carriedLabels.length; i++){
        rows.get(rowIndex).add(carriedLabels[i]);
    }

    rowIndex++;
    rows.add(new JPanel());

    for(int i = 0; i < addend1Labels.length; i++){
        rows.get(rowIndex).add(addend1Labels[i]);
    }

    rowIndex++;
    rows.add(new JPanel());

    for(int i = 0; i < addend2Labels.length; i++){
        rows.get(rowIndex).add(addend2Labels[i]);
    }

    rowIndex++;
    rows.add(new JPanel());

    for(int i = 0; i < sumLabels.length; i++){
        rows.get(rowIndex).add(new JLabel("__"));
    }

    rowIndex++;
    rows.add(new JPanel());

    for(int i = 0; i < sumLabels.length; i++){
        rows.get(rowIndex).add(sumLabels[i]);
    }

    for(int i = 0; i < rows.size(); i++){
        this.add(rows.get(i));
    }
}

}
packagemain;
导入java.awt.Color;
导入java.awt.Dimension;
导入java.util.ArrayList;
导入javax.swing.BoxLayout;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
导入算术加法问题;
公共类控制台扩展了JPanel{
专用整数宽度=230,高度=260;
私有数组列表行;
私有ArrayList列;
私有void init(){
此.setPreferredSize(新尺寸(宽度、高度));
这个.背景(颜色.白色);
this.setLayout(新的BoxLayout(this,BoxLayout.Y_轴));
}
公共控制台(){
init();
}
public void printAnswer(添加问题){
int rowIndex=0;
JLabel[]sumLabels=问题。getSumLabels();
JLabel[]addend1Labels=问题。getAddend1Labels();
JLabel[]addend2Labels=问题。getAddend2Labels();
JLabel[]carriedLabels=问题。getCarriedLabels();
添加(新的JPanel());
对于(int i=0;i
您从未初始化您的
私有数组列表行成员。换成
private ArrayList rows=new ArrayList()。这同样适用于
,尽管它似乎没有在您发布的代码中的任何地方使用。

在构造函数中初始化
ArrayList()

public Console(){
    rows = new ArrayList<JPanel>();
    columns = new ArrayList<JLabel>();
    init();
}
公共控制台(){
行=新的ArrayList();
columns=newarraylist();
init();
}

您可以将此答案标记为问题的解决方案。