используя бесконечный цикл в событии нажатия кнопки - PullRequest
0 голосов
/ 03 июля 2011

Есть ли известная проблема, если я использую бесконечный цикл for в событии нажатия кнопки?Собственно, сначала я настроил программу, взяв настройки из графического интерфейса.Затем, когда я нажимаю кнопку запуска, я хочу, чтобы функция вызывалась непрерывно.Эта функция не является частью графического интерфейса.это функция из оставшейся части программы.

Ответы [ 4 ]

1 голос
/ 03 июля 2011

Проблема в том, что ваш обработчик событий (здесь ActionListener) вызывается в потоке диспетчеризации событий AWT (EDT).

Этот поток является тем же потоком, который обрабатывает все взаимодействие с пользователем, а также перерисовкуваше приложение.Если вы не скоро вернетесь из прослушивателя действий, ваше приложение будет казаться замороженным.

Не делайте этого, вместо этого используйте новый поток.(Для обновления GUI перезвоните в EDT, используя EventQueue.invokeLater (или SwingUtilities.invokeLater, это то же самое).)

1 голос
/ 03 июля 2011

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

1 голос
/ 03 июля 2011

Да, есть: GUI будет полностью заморожен.Вы должны выполнять долгосрочные задачи в фоновом потоке.Обычно это делается с помощью SwingWorker .Посмотрите учебник Swing , чтобы узнать, как их использовать.

1 голос
/ 03 июля 2011

Да, ваш графический интерфейс перестанет отвечать.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...