Нужна помощь в создании задержки в приложении JavaFX - PullRequest
0 голосов
/ 22 сентября 2019

Я делаю приложение javafx, которое имитирует вакуум робота.

Я хочу, чтобы оно было автоматизировано, чтобы оно само пылесосило окружающую среду.

Мне нужно вставить задержку, чтобычеловек может видеть шаги, которые предпринимает вакуум, когда он проходит через окружающую среду.

Пока все протестированные мной методы задержки вызывают сбой моей программы, если они находятся внутри цикла while.

Если я поставлюэто вне времени и просто нажмите кнопку для следующего шага, все работает отлично.

Это также работает нормально, если я установлю задержку на очень короткое время, например, 1 мс.

Любые идеипочему это происходит?

1 Ответ

0 голосов
/ 23 сентября 2019

Любое приложение, которое какое-то время выполняет набор инструкций (занято) и не может ответить на пользовательский ввод или системные события, «воспринимается» Windows как «не отвечающее» и когда вы пытаетесь взаимодействовать с «не отвечающим»Windows сообщит вам, что произошел сбой.

Проблема, видите ли, в том, что вы пытаетесь отложить обновление интерфейса с помощью цикла while, и это заставляет вашу программу что-то выполнять некоторое время, а пока она занята выполнением вашейЦикл не может отвечать на системные или пользовательские события.

Если вы хотите делать отложенные обновления, используйте многопоточность.Ваш цикл while блокирует основной поток, который также отвечает за рендеринг и получение любого ввода, поэтому вы не можете заблокировать этот поток.Создайте другой поток и поделитесь состоянием (например, используйте шаблон наблюдателя).И тогда вы можете выполнить Sleep TimeUnit () в этом вспомогательном потоке, и это не приведет к сбою вашего приложения.

...