0

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

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

当用户选择这些选项之一时,我将导航到窗口以执行工作。他们希望总的舞台永远开放,并为要完成的工作打开另一个舞台。我可以这样做:

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

这提供了所需的外观和感觉 - 但是当显示模式窗口时,我似乎遇到了线程问题。

例如 - 在一个工作窗口中,我启动一项服务并显示一个 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 中是否有办法在不会被其他阶段的警报阻止的新进程/线程中打开阶段?

4

1 回答 1

2

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

ProgressDialog progDiag = new ProgressDialog(service);
progDiag.setTitle(title);
progDiag.initOwner(getPrimaryStage());
progDiag.setHeaderText(message);
progDiag.initModality(Modality.WINDOW_MODAL);
service.start();
于 2015-01-12T15:20:51.263 回答