控制 FX 进度对话框模式和警报模式

Controls FX Progress Dialog Modality & Alert Modality

我 运行 遇到了一些问题,我不确定该怎么做。

我的应用程序将有一个通用的应用程序阶段,它将向用户展示他们的工作选择——即任务列表或类似的东西。

当用户选择这些选项之一时,我将导航至 window 以执行工作。他们希望总舞台常开,开另一个舞台来完成工作。我可以这样做:

FXMLLoader loader = new FXMLLoader();
Parent node = loader.load(this.getClass().getResource("MyView.fxml").openStream());
Scene scene = new Scene(node);
Stage stage = new Stage();
stage.setTitle("You are working on - Blah Blah Blah....");
stage.setScene(scene);
stage.show();

这提供了所需的外观和感觉 - 然而,当出现模态 windows 时,我似乎 运行 遇到了线程问题。

例如 - 在一个工作人员中 window 我启动了一项服务并显示了一个 ControlsFX 进度对话框,如下所示:

ProgressDialog progDiag = new ProgressDialog(service);
progDiag.setTitle("Busy");
progDiag.setHeaderText("Doing the work you asked me to do....");
service.start();

我们假设这是一个正在检索大量数据的服务器调用 - 因此在处理过程中,我想转到另一个开放阶段来处理它。但是我不能,因为整个应用程序的 UI 被这个控件阻止了。

其次,假设其中一个阶段发生错误,我们显示警报:

Alert error = new Alert(AlertType.ERROR);
error.setContentText("Something bad just happened....");
error.show();

这也阻止了整个 UI 而不仅仅是有问题的阶段。

在 Java FX 中有没有办法在新的 process/thread 中打开舞台,而不会被其他舞台上的警报阻止?

我能够通过向将显示消息的控制器提供阶段参考来解决我的问题。我对此并不感冒,因为我需要传递该参考,但我没有找到另一种方法来处理它..

ProgressDialog progDiag = new ProgressDialog(service);
progDiag.setTitle(title);
progDiag.initOwner(getPrimaryStage());
progDiag.setHeaderText(message);
progDiag.initModality(Modality.WINDOW_MODAL);
service.start();