此代码是按钮的动作侦听器。我有一个用户输入数据的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()来使它成为一个整数。知道这里发生了什么,以及如何解决它?
答案 0 :(得分:1)
您知道如何使用调试器吗?如果没有,您应该学习如何并逐步执行代码以查看发生的情况。
发生这种情况时,{p>dtm.getValue(i,j)
对i
和j
的某些组合返回null。使用调试器,您可以准确找出它发生的位置。
如果这是预期的(这可能是null
),那么你应该进行防御性编程并输入空检查,例如:
Integer cellValue = dtm.getValueAt(i,j);
if (cellValue != null) {
blades.add(cellValue);
}
当然,如果单元格值不能null
,或者错过blades
中的值,那么您应将其作为错误处理,例如向用户报告数据丢失等。