什么';JavaFX中showAndWait背后的代码是什么?

什么';JavaFX中showAndWait背后的代码是什么?,java,javafx,javafx-2,javafx-8,javafxports,Java,Javafx,Javafx 2,Javafx 8,Javafxports,我开发了一个小的JavaFX应用程序,部署在Android设备上。由于当前版本的JavaFXPorts还不支持警报,所以我自己实现了dialog。我的问题是:我不知道如何实现showAndWait功能。有人知道这个想法吗? 代码如下: private static int status; public static int showConfirm(String message){ status = 0; black = new StackPane(); black.se

我开发了一个小的JavaFX应用程序,部署在Android设备上。由于当前版本的JavaFXPorts还不支持警报,所以我自己实现了dialog。我的问题是:我不知道如何实现showAndWait功能。有人知道这个想法吗?

代码如下:

private static int status;
public static int showConfirm(String message){
    status = 0;

    black = new StackPane();
    black.setStyle("-fx-background-color: black; -fx-opacity: 0.7;");
    black.setPrefSize(Main.WIDTH, Main.HEIGHT);

    Label label = new Label(message);
    label.setStyle("-fx-font-size: 22px;");
    label.setWrapText(true);

    Button okBtn = new Button("OK");
    okBtn.getStyleClass().add("terminal-button");
    okBtn.setPrefWidth(120);
    okBtn.setOnAction(new EventHandler<ActionEvent>(){
        @Override
        public void handle(ActionEvent event) {
            status = 1;
            Dialog.hide();
        }
    });

    Button cancelBtn = new Button("Cancel");
    cancelBtn.getStyleClass().add("terminal-button");
    cancelBtn.setPrefWidth(120);
    cancelBtn.setOnAction(new EventHandler<ActionEvent>(){
        @Override
        public void handle(ActionEvent event) {
            status = -1;
            Dialog.hide();
        }
    });

    HBox btnContainer = new HBox(10);
    btnContainer.setAlignment(Pos.CENTER_RIGHT);
    btnContainer.getChildren().addAll(okBtn,cancelBtn);

    VBox root = new VBox(30);
    root.setStyle("-fx-background-color: white;");
    root.setPadding(new Insets(20));
    root.setPrefWidth(Main.WIDTH - 200);
    root.getChildren().addAll(label,btnContainer);

    Group container = new Group();
    container.getChildren().add(root);

    Main.PAGE.getChildren().add(black);
    Main.PAGE.getChildren().add(container);

    return status;
}
私有静态int状态;
公共静态int showConfirm(字符串消息){
状态=0;
黑色=新的堆栈窗格();
黑色.setStyle(“-fx背景色:黑色;-fx不透明度:0.7;”);
黑色.setPrefSize(Main.WIDTH,Main.HEIGHT);
标签=新标签(消息);
label.setStyle(“-fx字体大小:22px;”);
label.setWrapText(true);
按钮okBtn=新按钮(“确定”);
okBtn.getStyleClass().add(“终端按钮”);
okBtn.setPrefWidth(120);
okBtn.setOnAction(新的EventHandler(){
@凌驾
公共无效句柄(ActionEvent事件){
状态=1;
Dialog.hide();
}
});
按钮取消BTN=新按钮(“取消”);
cancelBtn.getStyleClass().add(“终端按钮”);
取消BTN.setPrefWidth(120);
cancelBtn.setOnAction(新的EventHandler(){
@凌驾
公共无效句柄(ActionEvent事件){
状态=-1;
Dialog.hide();
}
});
HBox BTN容器=新的HBox(10);
BTN容器设置对齐(位置居中\右侧);
btnContainer.getChildren().addAll(okBtn,cancelBtn);
VBox根=新的VBox(30);
root.setStyle(“-fx背景色:白色;”);
根。设置填充(新插图(20));
root.setPrefWidth(Main.WIDTH-200);
root.getChildren().addAll(标签,btnContainer);
组容器=新组();
container.getChildren().add(根目录);
Main.PAGE.getChildren().add(黑色);
Main.PAGE.getChildren().add(容器);
返回状态;
}

您可以看看hmm。。我的第一个猜测(非常原始!)是将runlater与倒计时闩锁结合使用,但这里的快速搜索揭示了Android的问题。。没主意了,对不起,你能告诉我更多关于倒计时的事吗?这是什么?如果我没记错的话(现在没时间挖掘源代码),这是通过阻止FX应用程序线程并启动一个嵌套的FX应用程序线程(即,显示对话框的
Platform.isFXApplicationRead()
返回
true
)来完成的。这深入到了非公共API中。如果您无法使用现有的对
showAndWait
的调用,我强烈建议您找到另一种解决方案:例如在对话框隐藏时设置
BooleanProperty
,并使用该属性注册一个侦听器,以执行隐藏时需要执行的代码。
dialog.showAndWait()
内部使用调用
com.sun.javafx.tk.Toolkit.getToolkit().enterNestedEventLoop()
com.sun.javafx.tk.Toolkit.getToolkit().exitNestedEventLoop()
您可以查看hmm。。我的第一个猜测(非常原始!)是将runlater与倒计时闩锁结合使用,但这里的快速搜索揭示了Android的问题。。没主意了,对不起,你能告诉我更多关于倒计时的事吗?这是什么?如果我没记错的话(现在没时间挖掘源代码),这是通过阻止FX应用程序线程并启动一个嵌套的FX应用程序线程(即,显示对话框的
Platform.isFXApplicationRead()
返回
true
)来完成的。这深入到了非公共API中。如果您无法使用现有的对
showAndWait
的调用,我强烈建议您找到另一种解决方案:例如在对话框隐藏时设置
BooleanProperty
,并使用该属性注册一个侦听器,以执行隐藏时需要执行的代码。
dialog.showAndWait()
内部使用调用
com.sun.javafx.tk.Toolkit.getToolkit().enterNestedEventLoop()
com.sun.javafx.tk.Toolkit.getToolkit().exitNestedEventLoop()