0
我遇到了初始化我的一個表的問題。 我首先啓動我的程序,並希望稍後加載數據。JavaFX TableColumn.setCellValueFactory()拋出空指針
我得到了以下設置:
Main.java:初始化程序並加載所有的控制器,這工作正常。 它也具有加載數據的功能,如果這樣做,它將被存儲在列表中。
TableViewController.java
控制我程序中的一個Tab,其中包含TableView
。
setMain
在程序啓動時在我的Main.java中調用。
@FXML
private TableView<MyObject> tableView;
@FXML
private TableColumn<MyObject, String> columnOne;
@FXML
private TableColumn<MyObject, Integer> columnTwo;
@FXML
private TableColumn<MyObject, String> columnThree;
public void setMain(Main main) {
this.main = main;
tableView.setItems(main.getMyObjectObservableList());
}
public void updateContents() {
columnOne.setCellValueFactory(value->value.getValue().getType());
columnTwo.setCellValueFactory(value->value.getValue().getTotal().asObject());
columnThree.setCellValueFactory(value->value.getValue().getTrend());
}
我越來越
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
Caused by: java.lang.NullPointerException
行的columnOne.SetCellValueFactory;
我用Eclipse調試器,並在updateContents
設置斷點,我TableView
對象充滿了數據,被加載。
爲什麼拋出異常?
EDIT1:
FXML:
<TableView fx:id="tableView">
<columns>
<TableColumn fx:id="columnOne" prefWidth="411.0" text="title" />
<TableColumn fx:id="columnTwo" maxWidth="335.0" minWidth="-1.0" prefWidth="188.0" />
<TableColumn fx:id="columnThree" maxWidth="335.0" minWidth="-1.0" prefWidth="188.0" />
</columns>
</TableView>
加載FXML:
public void initTable() {
try {
FXMLLoader loader = new FXMLLoader();
loader.setLocation(Main.class.getResource("view/Table.fxml"));
AnchorPane table = (AnchorPane) loader.load();
Tab t = new Tab();
t.setText("Table");
t.setContent(table);
mainTabPane.getTabs().add(t);
tableViewController = loader.getController();
tableViewController.setMain(this);
} catch (IOException e) {
e.printStackTrace();
}
}
更新內容:
public void loadData(File[] files) throws IOException {
//loading data here
myObjectObservableList.add(new MyObject(params));
TableViewController.updateContents();
}
你可以發佈包含'TableColumn'創建的fxml片段,你正在加載fxml的Java代碼部分和你調用'updateContents'的部分? – fabian
@fabian完成:) – Daniel
'tableViewController'和'TableViewController'好像是2個不同的變量。爲什麼?你確定兩個變量都包含相同的控制器實例嗎?此外,使用'TableView.refresh'(JavaFX 8u60 +)可能更簡單。此外,如果'myObjectObservableList'設置爲表的'items',則不需要手動刷新表... – fabian