由于空指针异常,无法从JTable获取数据

时间:2014-10-17 15:32:39

标签: java jtable

此代码是按钮的动作侦听器。我有一个用户输入数据的JTable。它充满了整数。出于某种原因,我能够println()每一个值。但是,由于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()来使它成为一个整数。知道这里发生了什么,以及如何解决它?

1 个答案:

答案 0 :(得分:1)

您知道如何使用调试器吗?如果没有,您应该学习如何并逐步执行代码以查看发生的情况。

发生这种情况时,{p> dtm.getValue(i,j)ij的某些组合返回null。使用调试器,您可以准确找出它发生的位置。

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

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

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