树项值为空,引发空指针异常



我正在使用JFoenix库来构建我的UI。

我在控制器类中有一个通过 FXML 映射的JFXTreeTableView

@FXML private JFXTreeTableView<MyObject> table;

我用于填写列的数据存储在不包含任何空数据ObservableList中,如调试器所示:

ObservableList<MyObject> list = FXCollections.observableArrayList(task.getValue());

之后,我创建了一个新JFXTreeTableColumn

JFXTreeTableColumn<MyObject, String> Column1 = new JFXTreeTableColumn<>("Column1");

现在,当我尝试像这样setCellValueFactory()列时,会发生空指针异常:

nameColumn.setCellValueFactory(param -> new SimpleStringProperty(param.getValue().getValue().getStringValue());

调试器显示paramTreeItem值为 null。但我不明白为什么它是空的。我在另一个控制器中具有几乎相同的代码,它运行良好。

可验证的示例:

福美

<?xml version="1.0" encoding="UTF-8"?>
<?import com.jfoenix.controls.JFXButton?>
<?import com.jfoenix.controls.JFXSpinner?>
<?import com.jfoenix.controls.JFXTabPane?>
<?import com.jfoenix.controls.JFXTreeTableView?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.Tab?>
<?import javafx.scene.control.TreeTableView?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.StackPane?>
<StackPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity"
prefHeight="768.0" prefWidth="1366.0"
xmlns="http://javafx.com/javafx/8.0.141" xmlns:fx="http://javafx.com/fxml/1"
fx:controller="sample.Controller">
<JFXTabPane>
<Tab text="Home">
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0">
<JFXTreeTableView fx:id="table" layoutY="86.0" prefHeight="636.0" prefWidth="1366.0"
AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0"
AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="86.0">
<columnResizePolicy>
<TreeTableView fx:constant="CONSTRAINED_RESIZE_POLICY"/>
</columnResizePolicy>
</JFXTreeTableView>
<JFXButton layoutX="180.0" layoutY="29.0" onAction="#ExampleMethod" prefHeight="31.0"
prefWidth="83.0" text="Refresh"/>
</AnchorPane>
</Tab>
</JFXTabPane>
</StackPane>

控制器类

public class Controller {
@FXML
private JFXTreeTableView<MyObject> table;
@FXML
public void ExampleMethod() {
ObservableList<MyObject> list = FXCollections.observableArrayList();
list.add(new MyObject("test_value"));
JFXTreeTableColumn<MyObject, String> column = new JFXTreeTableColumn<>("Name");
column.setCellValueFactory(param -> new SimpleStringProperty(param.getValue().getValue().getSomeValue()));
final TreeItem<MyObject> root = new RecursiveTreeItem<>(list, RecursiveTreeObject::getChildren);
table.getColumns().setAll(column);
table.setRoot(root);
}
}

我的对象

package sample;
import com.jfoenix.controls.datamodels.treetable.RecursiveTreeObject;
public class MyObject extends RecursiveTreeObject<MyObject> {
private final String SomeValue;
public MyObject(String someValue) {
SomeValue = someValue;
}
public String getSomeValue() {
return SomeValue;
}

}

感谢任何帮助,

谢谢

我也得到了这个错误,并通过声明我的变量解决了这个问题。 在您的情况下,

private JFXTreeTableView<MyObject> table;

private JFXTreeTableView<MyObject> table = new JFXTreeTableView<>();

最新更新