You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:19:59