JavaFX表格数据获取异常:循环读取触发NullPointerException
解决JavaFX表格遍历中的NullPointerException问题
先说说你的代码里的核心问题:
- 你写了循环要遍历表格的所有行,但循环体里却一直调用
tabel_otapproclInfo.getSelectionModel().getSelectedItem()来拿数据。如果表格里没有选中任何行,这个方法会直接返回null,接着调用它的getEMPLOYEEID()这类getter方法,自然就触发空指针异常了。 - 退一步讲,就算有选中行,你的逻辑也和“遍历所有表格数据”的需求不符——循环里会重复打印同一个选中行的数据,而不是每行的内容。
修正后的代码(遍历所有行)
如果你的目标是获取表格里每一行的数据,应该直接从表格的items集合中取对应行的对象,而不是依赖选中项:
for (int i = 0; i < tabel_otapproclInfo.getItems().size(); i++) { // 直接从items集合获取第i行的数据对象 var rowData = tabel_otapproclInfo.getItems().get(i); // 先判断对象是否为null,提前避免空指针 if (rowData != null) { String s = rowData.getEMPLOYEEID(); String s2 = rowData.getEMPLOYEENAME(); String s3 = rowData.getEMPLOYEEDEPT(); String s4 = rowData.getSTATUS(); String s5 = rowData.getDATES(); String u = rowData.getUSERNMAE(); System.out.println(u + " " + s + " " + s2 + " " + s3 + " " + s4 + " " + s5); } }
用增强for循环会更简洁:
for (var rowData : tabel_otapproclInfo.getItems()) { if (rowData != null) { String s = rowData.getEMPLOYEEID(); String s2 = rowData.getEMPLOYEENAME(); String s3 = rowData.getEMPLOYEEDEPT(); String s4 = rowData.getSTATUS(); String s5 = rowData.getDATES(); String u = rowData.getUSERNMAE(); System.out.println(u + " " + s + " " + s2 + " " + s3 + " " + s4 + " " + s5); } }
如果需求是处理选中的行(而非所有行)
那你不需要遍历整个表格,先判断选中项是否存在再操作即可:
var selectedRow = tabel_otapproclInfo.getSelectionModel().getSelectedItem(); if (selectedRow != null) { String s = selectedRow.getEMPLOYEEID(); String s2 = selectedRow.getEMPLOYEENAME(); String s3 = selectedRow.getEMPLOYEEDEPT(); String s4 = selectedRow.getSTATUS(); String s5 = selectedRow.getDATES(); String u = selectedRow.getUSERNMAE(); System.out.println(u + " " + s + " " + s2 + " " + s3 + " " + s4 + " " + s5); } else { System.out.println("没有选中任何行,请先选择一行数据"); }
另外注意你代码里的USERNMAE可能是拼写错误,应该是USERNAME,如果你的实体类里是正确拼写,记得修正这个笔误,避免后续出现其他问题。
内容的提问来源于stack exchange,提问作者Dinesh Madushanka
相关产品推荐
相关产品推荐

