@RunOnFxThread
@RunOnFxThread
annotation offers for a convenient way to execute the target on JavaFX UI thread (JavaFX Application Thread).
Annotation can be applied at method level or at class level (to mark all methods within a class)
Example
private final VBox vBox = new VBox();
public void start(@Observes final FxPostStartupEvent event) {
Stage = event.getPrimaryStage();
Scene scene = new Scene(this.vBox);
stage.setScene(scene);
stage.show();
try (ExecutorService executorService = Executors.newSingleThreadExecutor()) {
executorService.submit(() -> this.showNode(this.createExpensiveNode()));
}
}
Node createExpensiveNode() { (1)
return new Label(LocalTime.now().toString());
}
@RunOnFxThread
void showNode(final Node node) { (2)
this.vBox.getChildren().add(node);
}
1 | createExpensiveNode method will be executed in a thread from executor service |
2 | showNode method will be executed on JavaFX UI thread (JavaFX Application Thread) |