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

关于为2D对象列表赋值的NullPointerException

柴俊捷
2023-03-14

我试图将字符串分配给2D对象列表,但每次都遇到NullPointerException。2D对象列表是自定义表模型类的数据源,该类将其提供给JTable。源是一个2D字符串列表,它只由数据对组成,但是这两部分都是需要打印的字符串,所以映射不适合。我遍历源列表并设置表数据列表的值。

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);

并且是非空的。

private ArrayList<ArrayList<Object>> tableData = new ArrayList<ArrayList<Object>>();
                @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);
        }
        
    }

共有1个答案

邢璞
2023-03-14

那么,如果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
 类似资料:
  • 我有以下列表,里面是另一个列表,然后是字符串列表 <代码>列表 示例 除了执行嵌套循环并最终替换列表之外,还有更好的方法吗?也许有溪流?

  • 请建议更好的方法将路线转换为路线地图。

  • 现在从接口获取回一个对象result,它的属性和data是一样的,我要怎么把reasult值赋值给data以达到响应式? 这种可以吗?还是要先解构,再赋值给data,或者是用...这种,或者Object.assign()这种?

  • 我有两个对象列表,它们在两个列表中都有重复名称。我需要从清单2中删除清单1中的所有重复值。 下面是一个场景,类有名称变量,用这个变量需要检查清单1中的重复值并需要删除。 //这是具有3个对象的第一个列表 清单1大小为1 请建议我在Java8与流。

  • 最近我遇到了一个问题,ArrayList中充满了对象 而每个 Item 对象都有自己的属性,如或整数。在我的图形界面中,我希望JComboBox仅填充 ArrayList中每个对象的名称值。 中的对象是在我的程序运行时添加的,它一开始没有值。将新项目添加到我的数组列表后,我调用 但这只给我一些类似的东西。有没有可能只显示ComboBox中ArrayList中每个项目的值?