При использовании JavaFX 8 нам нужно запускать взаимодействия с GUI через Platform.runLater
, иначе они будут генерировать исключения, если они запускаются из другого потока.
Однако реализация Platform.runLater
никогда не проверяет, находится ли она в данный момент в потоке JavaFX.
Я написал следующий метод:
public static void runSafe(final Runnable runnable) {
Objects.requireNonNull(runnable, "runnable");
if (Platform.isFxApplicationThread()) {
runnable.run();
}
else {
Platform.runLater(runnable);
}
}
Это гарантирует, что он никогда не может быть запущен в потоке не-fx-приложения.
Есть ли причина, по которой реализация по умолчанию не делает такого рода короткое замыкание?