Java TreeItem值为null,引发null指针异常
我正在使用JFoenix库构建我的UI 我的控制器类中有一个通过FXML映射的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
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<>();