【问题标题】:JavaFx setOnCloseRequest & File check waitJavaFx setOnCloseRequest & 文件检查等待
【发布时间】:2017-03-16 20:55:46
【问题描述】:

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

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();
                    }
                });

之前,我只是使用“primaryStage.show();”而不是 setOnCloseRequest但这无论如何都会在关闭第一个窗口后打开第二个窗口。所以,如果我按下按钮,它就会打开,如果我点击右上角的 X,它也会打开。我不想这样。我尝试了 setOnCloseRequest 来检查用户是否在退出之前设置了他的名字(基本上如果他按下按钮保存)这样,当我用 X 关闭时它不会显示,但如果按下按钮也不会打开.我希望它在按下按钮而不是 X 时打开。我“认为”问题可能是当用户按下按钮时,它“立即”检查文件但尚未创建... .

感谢您的回答!

【问题讨论】:

    标签: java javafx


    【解决方案1】:

    如果你不想关闭窗口,你应该消费关闭请求事件:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-28
      相关资源
      最近更新 更多