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