Java TreeItem值为null,引发null指针异常

Java TreeItem值为null,引发null指针异常,java,javafx,jfoenix,Java,Javafx,Jfoenix,我正在使用JFoenix库构建我的UI 我的控制器类中有一个通过FXML映射的JFXTreeTableView: @FXML private JFXTreeTableView<MyObject> table; 之后,我创建了一个新的JFXTreeTableColumn: JFXTreeTableColumn<MyObject, String> Column1 = new JFXTreeTableColumn<>("Column1"); 调试器显示param

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

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

@FXML private JFXTreeTableView<MyObject> table;
之后,我创建了一个新的
JFXTreeTableColumn

JFXTreeTableColumn<MyObject, String> Column1 = new JFXTreeTableColumn<>("Column1");
调试器显示
param
TreeItem
值为空。但我不明白为什么它是空的。我在另一个控制器中有几乎相同的代码,它工作得非常好

可验证的示例:

FXML


控制器类

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);
}
}
公共类控制器{
@FXML
私有JFXTreeTableView表;
@FXML
public void ExampleMethod(){
ObservableList=FXCollections.observableArrayList();
添加(新的MyObject(“测试值”);
JFXTreeTableColumn=新的JFXTreeTableColumn(“名称”);
column.setCellValueFactory(param->new SimpleStringProperty(param.getValue().getValue().getSomeValue());
final TreeItem root=新的递归TreeItem(列表,递归TreeObject::getChildren);
table.getColumns().setAll(column);
表.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;
}
包装样品;
导入com.jfoenix.controls.datamodels.treetable.RecursiveTreeObject;
公共类MyObject扩展了RecursiveTreeObject{
私有最终字符串值;
公共MyObject(字符串值){
SomeValue=SomeValue;
}
公共字符串getSomeValue(){
返回一些值;
}
}

谢谢你的帮助


谢谢

我也得到了这个错误,并通过声明我的变量解决了这个问题。 就你而言

private JFXTreeTableView<MyObject> table;
私有JFXTreeTableView表;

private JFXTreeTableView table=new JFXTreeTableView();

您能添加一个新的吗?我知道在某些版本的JavaFX中,
ChoiceBox
在第一次选择时返回一个
null
值。我不知道
JFXTreeTableView
是否也会遭受同样的痛苦。@M.leRutte我添加了一个可验证的示例在设置表的根之后调用
setShowRoot(false)
很可能会解决您的问题Java命名约定在这里不适用:OP似乎想通过fxml注入表-在这种情况下,不能手动实例化该字段
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<>();