首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JavaFX多次打开和关闭舞台的正确方法

JavaFX多次打开和关闭舞台的正确方法
EN

Stack Overflow用户
提问于 2020-11-24 16:01:49
回答 1查看 193关注 0票数 0

问题:--我正在使用JavaFx开发客户端服务器桌面应用程序,除了我打开一个新阶段单击主页上的一个按钮时,新阶段只在我第一次打开它时加载数据外,一切都很好。新阶段的初始化方法向服务器发送请求,并接收返回其字段加载在新阶段上的对象。没有抛出任何异常,服务器总是正确地发送对象(通过在控制台上打印其阀来测试)。

我怀疑,当我单击按钮打开一个新阶段时,它每次都会创建FXML的一个新实例。我不明白的是,当我第一次打开舞台的时候,执行周期总是相同的。

最后,我尝试在第二个窗口中插入一个按钮,当单击该按钮时,将对象加载到窗口上,当我多次打开窗口时,这个按钮也会正确工作,但显然我不喜欢这个解决方案,这会迫使用户单击该按钮来撤回数据。

下面是允许打开新阶段的HomePage Controller方法:

代码语言:javascript
运行
复制
@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方法

代码语言:javascript
运行
复制
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对象时。

有什么建议吗?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2020-11-25 07:56:41

我发现了错误,基本上我使用的是可观察的模式,每次我打开一个控制器时,我都会将控制器对象关联到一个hashmap中,并且不接受同一个类中其他对象的插入。此外,每次我关闭第二阶段时,我都会忽略从映射中删除控制器的第一个实例,因此,可观察的模式只向创建的控制器的第一个实例发送更改通知,而不是向通过重新打开窗口创建的后续实例发送更改通知。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64990181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档