问题:--我正在使用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();
}
下面是第二阶段的Initialize方法
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对象时。
有什么建议吗?
谢谢
发布于 2020-11-25 07:56:41
我发现了错误,基本上我使用的是可观察的模式,每次我打开一个控制器时,我都会将控制器对象关联到一个hashmap中,并且不接受同一个类中其他对象的插入。此外,每次我关闭第二阶段时,我都会忽略从映射中删除控制器的第一个实例,因此,可观察的模式只向创建的控制器的第一个实例发送更改通知,而不是向通过重新打开窗口创建的后续实例发送更改通知。
https://stackoverflow.com/questions/64990181
复制相似问题