由于NullPointer执行,无法从JTable获取数据



此代码是按钮的操作侦听器。我有一个JTable,用户可以将数据输入其中。它充满了整数。出于某种原因,我可以打印每一个值。但是,由于NullPointerException,我无法将它们存储到我的ArrayList中。

btnCalculate.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent arg0) {
        ArrayList<Integer> blades=new ArrayList<Integer>();
        DefaultTableModel dtm = (DefaultTableModel) tableBlades.getModel();
        int nRow = dtm.getRowCount(), nCol = dtm.getColumnCount();
        System.out.println(nRow + ", " + nCol);
        for (int i = 0 ; i < nRow ; i++) {
            for (int j = 0 ; j < nCol ; j++) {
                blades.add(Integer.parseInt(dtm.getValueAt(i,j).toString()));
            }
        }
    }   
});

(编辑:为可读性添加括号)

根据错误日志,我已经能够将其缩小到将值添加到ArrayList的行。我知道getValueAt()返回一个对象,所以我使用了toString()和parseInt()使其成为一个整数。知道这里发生了什么以及如何修复吗?

你知道如何使用调试器吗?如果没有,您应该学习如何通过代码了解发生了什么。

当发生这种情况时,dtm.getValue(i,j)正在为ij的某个组合返回null。使用调试器,您可以准确地找出它发生的位置。

如果这是预期的(这可能是null),那么你应该进行防御编程并输入一个空检查,比如:

Integer cellValue = dtm.getValueAt(i,j);
if (cellValue != null) {
   blades.add(cellValue);
}

当然,如果单元格值为null或错过blades中的值是不合适的,那么您应该将其作为错误处理,例如,向用户报告数据丢失等。

最新更新