JFXTreeTableView设置CellValueFactory触发空指针异常求助
解决JFXTreeTableView设置CellValueFactory时的空指针异常
你遇到的空指针异常,根源是在cellValueFactory的lambda表达式中直接链式调用param.getValue().getValue()时,其中的TreeItem(也就是param.getValue())可能为空——这种情况通常发生在表格未完全初始化,或者列先于根节点被添加到表格时,导致单元格尝试获取还未就绪的数据。
下面是两种可行的解决方案:
1. 添加Null安全检查,避免直接链式调用
修改cellValueFactory逻辑,在访问嵌套的getValue()之前先做null校验,这样即使TreeItem为空也不会触发异常:
column.setCellValueFactory(param -> { TreeItem<MyObject> treeItem = param.getValue(); if (treeItem != null && treeItem.getValue() != null) { return new SimpleStringProperty(treeItem.getValue().getSomeValue()); } return new SimpleStringProperty(""); // 空值时返回空字符串,也可以根据需求返回其他默认值 });
2. 调整表格初始化顺序,先设置根节点再添加列
如果列先于根节点被添加到表格,可能会导致单元格在根节点就绪前尝试获取数据,进而触发null。你可以调整代码顺序,先设置表格的根节点,再添加列:
public void ExampleMethod() { ObservableList<MyObject> list = FXCollections.observableArrayList(); list.add(new MyObject("test_value")); JFXTreeTableColumn<MyObject, String> column = new JFXTreeTableColumn<>("Name"); // 先配置null安全的cellValueFactory column.setCellValueFactory(param -> { TreeItem<MyObject> treeItem = param.getValue(); return treeItem != null && treeItem.getValue() != null ? new SimpleStringProperty(treeItem.getValue().getSomeValue()) : new SimpleStringProperty(""); }); final TreeItem<MyObject> root = new RecursiveTreeItem<>(list, RecursiveTreeObject::getChildren); // 先设置表格根节点 table.setRoot(root); // 再将列添加到表格 table.getColumns().setAll(column); }
另外检查你的FXML配置,JFXTreeTableView的columnResizePolicy使用TreeTableView的常量是没问题的,不需要修改;你的MyObject类继承RecursiveTreeObject的写法也正确,RecursiveTreeObject::getChildren可以正确获取子节点列表。
内容的提问来源于stack exchange,提问作者Deviver
相关产品推荐
相关产品推荐

