JavaFX应用程序有一个树状菜单,单击一个菜单项会加载一个fxml文件 image attached
有些FXML是嵌套的,加载时间最长需要2-3秒。我想在FXML加载和初始化时显示进度指示器。控制器的初始化代码可以作为任务执行,并将其进度绑定到进度条控件,但问题是需要使用Platform.runLater()在FX Application线程中执行某些代码。如果我这样做,就无法知道初始化何时完成。
有没有办法处理这个看似简单的任务?
我无法共享需要很长时间才能加载的控制器代码,但是出于这个问题的目的,请假设以下初始化代码是罪魁祸首。我无法在Task线程中执行此代码块,因为无法从JavaFX Application线程以外的线程进行UI更改。如果我在Platform.runLater()中包含更改UI的代码部分,则任务可能在UI更改完成之前完成它的执行。
public void initialize(URL url, ResourceBundle rb) {
if (webEngine == null) {
webEngine = helpView.getEngine();
}
try {
Path filepath = Paths.get("docs/index.html");
webEngine.load(filepath.toUri().toString());
} catch (Exception ex) {
Alert alert = new Alert(Alert.AlertType.WARNING, "Failed to read doc files", ButtonType.OK);
alert.show();
}
}
拉吉