我有两个窗户。如果属性文件不存在,则启动第一个。如果文件已经存在,或者当用户单击创建文件的按钮时,第二个是(我希望它被打开)。这是代码...

try {
        if(f.exists()) {
            input = new FileInputStream("config.properties");
            prop.load(input);
        }

        if(f.exists() && prop.getProperty("name") != null){
            primaryStage.show();
        }else if(prop.getProperty("name") == null || !f.exists()){

            try {
                Stage stage = new Stage();

                FXMLLoader loader = new FXMLLoader(getClass().getResource("summ.fxml"));
                Parent root1 = loader.load();

                stage.setTitle("temp");
                stage.setResizable(false);
                stage.setScene(new Scene(root1));

                stage.showAndWait();

                summController summController = loader.getController();
                String name = summController.getName();
                stage.setOnCloseRequest(e->{

                    if(prop.getProperty("name") != null || f.exists()) {
                        primaryStage.show();
                    }
                });


以前,我没有setOnCloseRequest,而是有“ primaryStage.show();”。但这会在关闭第一个窗口之后随便打开第二个窗口。因此,如果我按下按钮,它也会打开,而且如果我单击顶部的X,它也会打开。我不希望那样我尝试了setOnCloseRequest来检查用户是否在退出之前设置了他的名字(基本上是按按钮保存),这种方式在我用X关闭时不会显示,但是在按下按钮时也不会打开。我希望它在按下按钮时打开,而不是X。我“认为”问题可能是当用户按下按钮时,它“立即”检查文件,但尚未创建... 。

感谢您的回答!

最佳答案

如果您不想关闭窗口,则应使用close请求事件:

if(prop.getProperty("name") != null || f.exists()) {
    primaryStage.show();
} else {
    e.consume();
}

10-07 17:08
查看更多