Java 由于NullPointer执行选项,无法从JTable获取数据
此代码是按钮的操作侦听器。我有一个用户输入数据的JTable。它充满了整数。出于某种原因,我能够打印ln()每个值。但是,由于NullPointerException,我无法将它们存储到ArrayList中Java 由于NullPointer执行选项,无法从JTable获取数据,java,jtable,Java,Jtable,此代码是按钮的操作侦听器。我有一个用户输入数据的JTable。它充满了整数。出于某种原因,我能够打印ln()每个值。但是,由于NullPointerException,我无法将它们存储到ArrayList中 btnCalculate.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { ArrayList<Int
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@PeterKdtm
不能为空,否则nRow
将抛出一个NPE-否则,这是最有可能的。使用括号({}
)!(即使你不需要)谢谢你!我研究过如何使用调试器,结果发现最后一个单元格是空的。其余的值保存得很好。我将添加代码以防止空值。