java中引发一个自定义加载对话框,然后执行一些需要几秒钟的同步函数

我正在尝试在 java 中引发一个自定义加载对话框,然后执行一些需要几秒钟的同步函数

只要函数执行,我希望对话框一直存在,一旦完成,我会关闭对话框。

我的对话框如下所示:

public abstract class LoaderControl extends Control implements SimpleDialogInfo {
    private static final StyleablePropertyFactory FACTORY = new StyleablePropertyFactory(Control.getClassCssMetaData());
    private LoaderDialogResponse response;
    private final DialogInfo dialogInfo;
    private final SimpleStringProperty text = new SimpleStringProperty("");
    private final SimpleBooleanProperty spinnerVisible = new SimpleBooleanProperty(true);
    private UpdaterStates state;
    private CloseDialogFunction onClose;

    @Override
    public void closeDialog(){
        onClose.closeDialog();
    }
    @Override
    public void setCloseDialog(CloseDialogFunction onClose){
        this.onClose = onClose;
    }
}

这就是我创建它并展示它的方式:

public void createIndependentDialog(SimpleDialogInfo content, EventHandler onClose) {
        Platform.runLater(() -> {
            Stage stage = new Stage();
            Parent p = new StackPane();
            Scene s = new Scene(p);
            stage.setScene(s);
            MFXGenericDialog dialogContent = MFXGenericDialogBuilder.build()
                    .makeScrollable(true)
                    .setShowAlwaysOnTop(false)
                    .get();

图片[1]-java中引发一个自定义加载对话框,然后执行一些需要几秒钟的同步函数-唐朝资源网

MFXStageDialog dialog = MFXGenericDialogBuilder.build(dialogContent) .toStageDialogBuilder() .initModality(Modality.APPLICATION_MODAL) .setDraggable(true) .initOwner(stage) .setTitle("Dialogs Preview") .setOwnerNode(grid) .setScrimPriority(ScrimPriority.WINDOW) .setScrimOwner(true) .get(); dialogContent.setMinSize(350, 200); MFXFontIcon infoIcon = new MFXFontIcon(content.getDialogInfo().getIcon(), 18); dialogContent.setHeaderIcon(infoIcon); dialogContent.setHeaderText(content.getDialogInfo().getHeader()); dialogContent.setContent((Node) content); MFXGenericDialog finalDialogContent = dialogContent; MFXStageDialog finalDialog = dialog; content.setCloseDialog(dialog::close); convertDialogTo(String.format("mfx-%s-dialog", content.getDialogInfo().getDialogType())); if(onClose != null) dialogContent.setOnClose(onClose); dialog.showAndWait();

图片[2]-java中引发一个自定义加载对话框,然后执行一些需要几秒钟的同步函数-唐朝资源网

}); }

这是它在调用类中的样子:

DialogLoaderControlImpl preloader = new DialogLoaderControlImpl(new LoaderDialogInfo("Searching For New Versions"));
DialogsController.getInstance().createIndependentDialog(preloader);
someSynchronousMethod();
preloader.closeDialog();

问题是当我到达“preloader.closeDialog()”行时,应该关闭对话框的 closeDialog 函数为空(onClose 字段为空)。

简而言之:

createIndependentDialog() 方法应该引发一个对话框,我想在对话框仍然显示时继续执行方法“someSynchronousMethod()”,并在方法完成后关闭它。

请注意,我在此处未显示的对话框中使用了皮肤,但如果我删除 Platform.runLater,它会起作用,但随后它会卡在 showAndWait() 中而没有按预期推进

是否有某种方式或已知设计有助于使用自定义对话框运行任务/方法?

© 版权声明
THE END
喜欢就支持一下吧
点赞41赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容