簡體   English   中英

TreeItem 值為空,拋出空指針異常

[英]TreeItem value is null, throwing Null Pointer Exception

我正在使用 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());

調試器顯示param TreeItem值為空。 但我不明白為什么它是空的。 我在另一個控制器中有幾乎相同的代碼,它工作得很好。

可驗證示例:

文件格式

<?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<>();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM