我有2个窗口(登录和主要)和适当的控制器。
我得到了这段代码。它位于LoginController.java中。当我运行app时,它将从/fxml/login.fxml打开登录窗口,其中LoginController设置为fx:controller。然后是登录按钮。方法signIn()与此按钮相关联。当我点击它时,它将关闭登录窗口,获取主窗口的控制器并从特定的fxml文件(/fxml/main.fxml)打开主窗口。同时,它将从Login窗口的文本字段中获取字符串并将它们传递给MainController(这些凭证用于执行SQL语句)。
public void signIn(ActionEvent event) {
MngApi.closeWindow(btn); //closes parent window of specified node
try{
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/fxml/main.fxml"));
Parent root1 = fxmlLoader.load();
Stage stage = new Stage();
stage.setTitle("PrintED");
stage.setScene(new Scene(root1, 1058, 763));//1058, 763
MainController ctrl = fxmlLoader.getController();
ctrl.setCredentials(uName.getText(), uPasswd.getText(),
ipAddress.getText(), dbName.getText());
stage.show();
}catch (IOException e){
}
}//signIn end
现在这就是问题:当我点击登录按钮时,将执行signIn()方法,登录窗口将关闭,并且会弹出SUCCESSFUL BUILD。没有其他窗口会打开。调试后我发现程序将在此行停止(之前的所有内容)
Parent root1 = fxmlLoader.load();
没有错误,没有信息,只有成功构建。对我来说最神秘的是它之前有效!登录wondow关闭,主窗口出现。我只添加了一些新的方法,动作事件和东西。我没有对LoginController和fxml文件进行任何更改。我只对MainController进行了更改(为main.fxml中的按钮添加了方法和操作事件)。
我不知道什么是坏的,我无能为力。请帮忙!
答案 0 :(得分:0)
好的,所以我发现什么是错的。错误发生在initilize()方法中。我在一个方法中应该初始化TreeTableView中的列。我认为当我运行程序时,初始化wil执行(在Controller构造函数之后),它将逐行运行代码。所以我把initializeColumns()方法放在那里,它将首先执行,只执行一次。看起来像这样:
public void initialize(){
initializeOrdersColumns();
//this listener will load (refresh) orders automaticaly when Orders Tab is selected
tabOrders.setOnSelectionChanged((event) -> {
if (tabOrders.isSelected()) {
List<TreeItem<Order>> allOrdersList = new ArrayList<>();
stackItems(allOrdersList, root);
root = new TreeItem<>();
ttwOrders.setRoot(root);
ttwOrders.setShowRoot(false);
}
});
//When we click refresh button, orders tab will reload Orders
btnOrdersRefresh.setOnAction((event) -> {
List<TreeItem<Order>> allOrdersList = new ArrayList<>();
stackItems(allOrdersList, root);
root = new TreeItem<>();
ttwOrders.setRoot(root);
ttwOrders.setShowRoot(false);
});
}//end of initialize()
删除initialize()方法的内容后,一切顺利,所以很明显错误代码就在那里。然后我评论了除第一个方法(initializeColumns())之外的所有代码,程序出错了。当我只注释initializeColumns()方法时,程序再次运行良好。所以很明显,initializeColumns()不能在initialize()方法中。不知道为什么,但我会发现。