назовите какой-нибудь другой личный материал, который делает то же самое.

ел бы приостановить выполнение метода в потоке приложения JavaFX и подождать, пока пользователь не выполнит взаимодействие с пользовательским интерфейсом. Важно не заморозить интерфейс.

Пример:

Button start = ...
Button resume = ...

start.setOnAction(evt -> {
     System.out.println("starting");
     start.setDisable(true);
     System.out.println("please press resume button.");
     pause();
     System.out.println("done");
     start.setDisable(false);
});

resume.setOnAction(evt -> resume());

Как я должен реализоватьpause() а такжеresume() методы?
Выполнение обработчика события должно ждать вpause(); звонить, пока пользователь не нажметresume кнопка иresume метод называется.

 isnot2bad26 сент. 2017 г., 13:42
Действительно ли необходимо «приостановить» выполнение метода? Просто завершите метод вместо вызова pause () и сделайте остальную часть работы в обработчике действия кнопки возобновления.

Ответы на вопрос(2)

где у меня есть аналогичная функция в классе Toolkit.

Toolkit.getToolkit().enterNestedEventLoop(obj);

а также

Toolkit.getToolkit().exitNestedEventLoop(obj);

Я не смотрел на источник JFX 9, но держу пари, что методы Platform - это просто ярлыки к тому же.

 Jai12 июн. 2018 г., 03:06
Это, скорее всего, ярлык, но всегда помните: не используйте частный API для производства, потому что они имеют полное право удалить частный API и заменить его чем-то другим, не сообщая никому об изменениях. Так что в любой момент они могут удалитьToolkit.getToolkit().enterNestedEventLoop(Object) и сделатьPlatform.enterNestedEventLoop() назовите какой-нибудь другой личный материал, который делает то же самое.
Решение Вопроса

Вы можете сделать это с помощьюPlatform.enterNestedEventLoop приостановить выполнение обработчика события иPlatform.exitNestedEventLoop (доступно с JavaFX 9) для возобновления выполнения:

private final Object PAUSE_KEY = new Object();

private void pause() {
    Platform.enterNestedEventLoop(PAUSE_KEY);
}

private void resume() {
    Platform.exitNestedEventLoop(PAUSE_KEY, null);
}

Platform.enterNestedEventLoop возвращается, когдаPlatform.exitNestedEventLoop вызывается с тем же параметром, что и первый аргумент.

 fabian17 окт. 2017 г., 17:03
@ user1803551 Это вопрос javafx 9. Есть аналогичные методы, доступные в предыдущих версиях javafx, но они описаны вcom.sun пакеты, которые не рекомендуется использовать.
 fabian22 сент. 2017 г., 19:33
@James_D Нельзя использовать один и тот же ключ сenterNestedEventLoop более одного раза до выхода из вложенного цикла.IllegalArgumentException будет брошен, если вы попробуете, видитеJavadoc:IllegalArgumentException - если указанный ключ связан с вложенным циклом событий, который еще не возвращен
 user180355117 окт. 2017 г., 04:02
А до Java9? :)
 James_D22 сент. 2017 г., 18:30
ЯвляетсяPlatform.enterNestedEventLoop идемпотент или звонки накапливаются? В частности, еслиPlatform.enterNestedEventLoop(...) вызывается, а затем вызывается из вложенного цикла с тем же параметром, делает первый вызовPlatform.exitNestedEventLoop (с одним и тем же параметром) освободить оба блока или он только освобождает блок во вложенном цикле событий (требующий повторного вызова для освобождения исходного блока)?

Ваш ответ на вопрос