我对JavaFX很新,如果这看起来像是一个天真的问题,请提前道歉!所以我的应用程序在第一个控制器中初始化了一个tabPane,它是从主应用程序类加载的。每次按下下一个按钮时,我再次从第一个控制器加载了第二个控制器。我试图将主控制器中当前的Tabpane索引转换为辅助控制器,如下所示:
Second Controller.java -
MainTestController mainObject =new MainTestController();
private void removeNullOrDeletedValues() {
System.out.println("size of original list"+ownerList.size());
int originalListSize = ownerList.size();
currentTabIndex = mainObject.findCurrentTabIndex(); //this gives nullPointException
并且如上面的注释中所标记的,它给出了零点异常,并且在调试findCurrentTabIndex()时,inspect窗口将mainTabPane显示为null!
mainTestController.java -
public int findCurrentTabIndex() {
int tabIndex = mainTabPane.getSelectionModel().getSelectedIndex(); //mainTabPane shows null?!
return tabIndex;
}
这对我来说很奇怪,因为在调试模式下按下下一个按钮(加载第二个控制器)之前,同样的类会在鼠标悬停检查时给出mainTabPane的所有值和其他详细信息;就像在下面这个方法一样,它工作正常,mainTabPane不是null:
mainTestController.java -
@FXML
private void nextTabAction() throws Exception {
int tabIndex = mainTabPane.getSelectionModel().getSelectedIndex(); //this isn't null on debug inspection
if(tabIndex==0 && dbAddedStatus==false) {
mainTabPane.getSelectionModel().selectNext();
sendOverviewListToDatabase();
CreateEntityTabs(tabIndex);
currentTabHeadChange();
}
我是否遗漏了一些重要的细节,例如一旦控制器失去焦点并且下一个加载,第一个控制器元素都变为空?
我知道nullPointException是什么以及它发生的原因。我想知道为什么mainTabPane只有在从第二个Controller调用后才为null!
答案 0 :(得分:1)
您使用MainTestController mainObject =new MainTestController();
创建一个新的Controller,但您需要将第一个Controller传递给第二个。
将MainTestController
的setter添加到SecondController
并在加载FXML文件时调用它。
例如:(应该在MainTestController中)
FXMLLoader loader = new FXMLLoader(getClass().getResource("second.fxml"));
Pane pane = loader.load();
SecondController controller = (SecondController)loader.getController();
controller.setMainTestController(this);