【发布时间】:2020-11-24 16:01:49
【问题描述】:
问题: 我正在使用 JavaFx 开发客户端服务器桌面应用程序,一切正常,除了我发现当我点击主页上的按钮打开一个新阶段时,新阶段仅在我第一次打开它时加载数据。新阶段的初始化方法向服务器发送请求并接收返回其字段已加载到新阶段的对象。没有抛出异常,服务器始终正确发送对象(通过在控制台上打印其值进行测试)。
我的怀疑是,当我单击按钮打开一个新阶段时,它每次都会创建一个新的 FXML 加载器实例。我没有得到的原因是执行周期在我第一次打开阶段和以下阶段时总是相同的。
我终于尝试在第二个窗口中插入一个按钮,单击该按钮时,会在窗口上加载对象,并且当我多次打开窗口时也可以正常工作,但显然我不喜欢这个解决方案,会强制用户点击按钮来检索数据。
这是允许打开新阶段的 HomePage Controller 方法:
@FXML
void showSecondView(MouseEvent event) throws IOException {
FXMLLoader loader = new FXMLLoader();
loader.setLocation(Main.class.getResource("/View_FXML/generaRichiesta.fxml"));
Pane secondPageLayout = loader.load();
SecondController secCon = loader.getController();
stage = new Stage();
stage.setScene(new Scene(secondPageLayout));
stage.setTitle("Second Stage");
stage.show();
}
这是第二阶段的初始化方法
public void initialize(URL url, ResourceBundle resourceBundle) {
//sending request to server and calling the following function to update the
//view withe the received object
Platform.runLater(
() -> {
//setting the view node "textField" with the object received from server
//if I print this value on console I always get the object correctly but
//it is loaded only the first time. When i call this function from a button it always
//works but I should do it manually
textField.setText().receivedObject.toString();
}
);
}
我真的不明白问题可能是什么,我想可能是因为当我每次创建 FXMLLoader 对象时。
有什么建议吗?
谢谢
【问题讨论】:
-
与往常一样的程序:minimal reproducible example 需要 ;)
-
嗨,我知道生成一个可重复的示例会更好,但现在我已经完成了应用程序,所以我应该制作一个小原型以使其工作。我真的在为这个错误而苦苦挣扎,而且很难找到什么不起作用,因为它不会引发任何错误。我从您的个人资料中看到 Java 桌面应用程序是您的业务。我问我们是否可以私下联系以向您展示问题。如果我显得打扰了,我深表歉意。谢谢
-
你有什么异常吗?确保您没有在任何地方吞下它们(包括失败的,例如
Task,没有必要的代码来报告错误)。您是否添加了任何(可能是临时的)日志记录语句以确保您认为应该执行的代码实际上正在执行?您是否尝试过使用调试器单步执行代码,以准确查看哪里出了问题? -
是的,当然,我记录并调试了两个控制器,每个语句之间的循环总是相同的......这就是让我发疯的原因......我也会尝试调试客户端服务器循环即使记录器已经告诉我结果是一样的
标签: javafx stage fxmlloader