2016-09-12 9 views
0

Я запрограммировал себе небольшой вспомогательный инструмент. Он получил небольшой графический интерфейс с кнопками «Run» и «Stop». Если я нажму «Запустить», программа выполнит цикл, который постоянно что-то делает (http-запросы - каждый час несколько).Java | Как закрыть JFrame во время цикла «forever»?

Но теперь у меня есть проблема, что, когда я нажимаю «Выполнить», кнопка остается нажатой, а программа/GUI ждет завершения процесса. За это время я не могу закрыть окно или нажать кнопку «Стоп». И поскольку процесс выполняется вечно, я никогда не могу его закончить - конечно, я могу закончить процесс в диспетчере задач.

Есть ли способ обойти эту проблему?

Я смотрю вперед полезный ответ ;-)

+1

Запустите новую тему для запуска цикла forever. –

+3

Не блокируйте EDT (Thread Dispatch Thread). Когда это произойдет, GUI «замерзнет». См. [Параллелизм в Swing] (https://docs.oracle.com/javase/tutorial/uiswing/concurrency/) для получения подробной информации и исправления. –

+0

И тоже спасибо! –

ответ

2

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

Проблема с этим подходом заключается в том, что все делается в Event Dispatching Thread, который является потоком, который обрабатывает события и другие операции пользовательского интерфейса. Любые длительные операции над этим потоком заставят ваш пользовательский интерфейс не реагировать.

Для решения этой проблемы вам необходимо будет запустить потоки обработчика событий Run, которые выполняют всю работу. Это оставит EDT свободным для взаимодействия с пользователями.

+0

Спасибо, сэр, теперь он отлично работает! Я думаю, что редактирование моего первого сообщения с исходным кодом больше не нужно :-) –

+0

@Leeengold: Добро пожаловать. – npinti

 Смежные вопросы

  • Нет связанных вопросов^_^