此代码是按钮的操作侦听器。我有一个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)
正在为i
和j
的某个组合返回null。使用调试器,您可以准确地找出它发生的位置。
如果这是预期的(这可能是null
),那么你应该进行防御编程并输入一个空检查,比如:
Integer cellValue = dtm.getValueAt(i,j);
if (cellValue != null) {
blades.add(cellValue);
}
当然,如果单元格值为null
或错过blades
中的值是不合适的,那么您应该将其作为错误处理,例如,向用户报告数据丢失等。