gpt4 book ai didi

java - 为 2D 对象列表赋值时出现 NullPointerException

转载 作者:行者123 更新时间:2023-12-02 03:33:47 25 4
gpt4 key购买 nike

我试图将字符串分配给 2D 对象列表,但是每次都会遇到 NullPointerException。 2D 对象列表是自定义表模型类的数据源,该类将其提供给 JTable。源是一个二维字符串列表,仅由数据对组成,但是两个部分都是需要打印的字符串,因此 map 不适合。我迭代源列表并设置表数据列表的值。

public class CustomTableModel extends AbstractTableModel {

private List<List<Object>> tableData = new ArrayList<>();

public void setValues(List<List<String>> values) {

//Sanity Check
if (values == null) {
throw new IllegalArgumentException("Values cannot be null");
} else {

System.out.println("Got values in table model");

//Iterate through and set table data
int i = 0;
int j = 0;
for (List<String> l : values) {
for (String s : l) {
setValueAt(s, i, j);
j++;
}
i++;
//Reset to 0 as only 2 colums needed
j = 0;
}
}
}

再往下是setValueAt方法

   @Override
public void setValueAt(Object value, int rowIndex, int columnIndex) {
System.out.println("Setting" + value + " at " + rowIndex + "," + columnIndex);
//This gives a NullPointerException
tableData.get(rowIndex).set(columnIndex, value);
//
fireTableCellUpdated(rowIndex, columnIndex);
}

调试器显示中的所有值

tableData.get(rowIndex).set(columnIndex, value);

存在且非空。

我确信字符串是一个对象,但是这里的 null 是什么?

编辑:

我已声明并初始化为 ArrayList:

private ArrayList<ArrayList<Object>> tableData = new ArrayList<ArrayList<Object>>();

并将 setValueAt 更新为:

                @Override
public void setValueAt(Object value, int rowIndex, int columnIndex) {
System.out.println("Setting" + value + " at " + rowIndex + "," + columnIndex);
//This causes IndexOutOfBoundsException
if(tableData.get(rowIndex) == null){
tableData.add(rowIndex, new ArrayList<>());
}else{
tableData.get(rowIndex).add(columnIndex, value);
//Called after both columns in a row are populated
fireTableCellUpdated(rowIndex, columnIndex);
}

}

但是,在 if 条件下对 tableData 调用 get() 时,它会给出 IndexOutOfBoundsException。如果为null,则应该执行if语句的第一个 block ?

最佳答案

好吧,如果 rowIndexcolumnIndexvalue 都明确设置,那么 tableData 为 null或者从get获取到的内部List为null。

您可以通过将语句分成几行来确定哪一个:

List<Object> row = tableData.get(rowIndex); //NPE means tableData is null
row.set(columnIndex, value); //NPE means inner List is null

关于java - 为 2D 对象列表赋值时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37703148/

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