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

Java 由于NullPointer执行选项,无法从JTable获取数据,java,jtable,Java,Jtable,此代码是按钮的操作侦听器。我有一个用户输入数据的JTable。它充满了整数。出于某种原因,我能够打印ln()每个值。但是,由于NullPointerException,我无法将它们存储到ArrayList中 btnCalculate.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { ArrayList<Int

此代码是按钮的操作侦听器。我有一个用户输入数据的JTable。它充满了整数。出于某种原因,我能够打印ln()每个值。但是,由于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()));
            }
        }
    }   
});
btnCalculate.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件arg0){
ArrayList刀片=新的ArrayList();
DefaultTableModel dtm=(DefaultTableModel)tableBlades.getModel();
int nRow=dtm.getRowCount(),nCol=dtm.getColumnCount();
系统输出打印LN(nRow+“,”+nCol);
对于(int i=0;i
(编辑:为可读性增加括号)


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

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

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

如果这是预期的(这可能是
null
),那么您应该防御性地编程并输入null检查,类似于:

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

当然,如果一个单元格值为
null
,或者在
blades
中遗漏一个值是不正常的,那么您应该将其作为错误处理,例如,向用户报告数据丢失等。

您可以检查dtm是否为null,或者dtm.getValueAt(i,j)是否返回null。我确信
getValueAt(i,j)
将被删除null@PeterK
dtm
不能为空,否则
nRow
将抛出一个NPE-否则,这是最有可能的。使用括号(
{}
)!(即使你不需要)谢谢你!我研究过如何使用调试器,结果发现最后一个单元格是空的。其余的值保存得很好。我将添加代码以防止空值。