为什么我的 Stage.close 不工作

Why my Stage.close is not Working

Stage.close() 对我不起作用。

我检查过: JavaFX 2.0: Closing a stage (window)

这是我的代码:

import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.scene.control.Label;
import javafx.scene.control.Button;
import javafx.stage.Modality;

public class MsgBox {

    public Stage MessageBox(String Title, String Message){

        VBox Pnl = new VBox();
        Pnl.setPadding(new Insets(10,10,10,10));
        Pnl.setSpacing(10);
        Pnl.setAlignment(Pos.CENTER);

            Label LblMsg = new Label(Message);
            Button CmdOK = new Button("OK");

        Pnl.getChildren().addAll(LblMsg, CmdOK);

        Scene SCN = new Scene(Pnl);

        Stage Window = new Stage();
            Window.initModality(Modality.APPLICATION_MODAL);
            Window.setTitle(Title);
            Window.setScene(SCN);
            Window.showAndWait();


        CmdOK.setOnAction(new EventHandler<ActionEvent>(){
            public void handle(ActionEvent ev){
                Window.close();
            }
        });

        return Window;
    }
}

这里是调用消息框的代码Class:

CmdUpdate.setOnAction(new EventHandler<ActionEvent>(){
        public void handle(ActionEvent ev){
            new MsgBox().MessageBox("Hello", "Hello World");

        }
 });

调用 Stage#showAndWait 等到舞台关闭后再返回,所以实际上下一行永远没有机会 运行。

移行

Window.showAndWait();

成为方法中的最后一个(至关重要 - 在您设置处理程序以允许关闭舞台之后),或者只需使用 Stage#show,您的问题应该得到解决。