Проблема в том, что при установке переменной isRun
на true
программа входит в while
l oop без выхода. Это происходит в том же потоке, в котором работает GUI, поэтому он перестает отвечать на запросы и не может обработать любое другое событие (например, при щелчке по Остановить действующее действие путем установки isRun
в false
).
Итак, решение состоит в том, чтобы запустить задачу while
l oop в другом потоке, оставляя поток, в котором GUI, свободным для обработки большего количества событий.
Для запуска задача в другом потоке Я рекомендую вам использовать любой из классов в параллельной среде, такой как ExecutorService
Если вы хотите отправить задачу, которая может быть отменив, вы даже можете использовать Future
.
Кроме того, помните, что нужно использовать какой-то механизм синхронизации, чтобы оба потока могли видеть последнее значение, присвоенное isRun
.