Должны ли мы использовать EventQueue.invokeLater для любого обновления GUI в настольном приложении Java?

Удивительно, что никто из них никогда не упоминал настройки сервера Apache сервера (*.conf) или .htaccess как причину этой ошибки. Найдите в файлах конфигурации .htaccess или Apache, чтобы убедиться, что у вас нет следующего набора DENY:

Header always set X-Frame-Options DENY

Смените его на SAMEORIGIN, делает работу так, как ожидалось:

Header always set X-Frame-Options SAMEORIGIN

16
задан Beryllium 25 September 2013 в 09:57
поделиться

2 ответа

Вам нужно использовать invokeLater только когда вы хотите обновить UI из другого потока, который не является потоком UI (поток диспетчеризации событий).

Предположим, у вас есть обработчик нажатия кнопки, и вы хотите изменить текст метки, когда кто-то нажимает на кнопку. Тогда вполне можно установить текст метки напрямую. Это возможно, потому что обработчик события нажатия кнопки выполняется в потоке UI.

Предположим, однако, что при очередном нажатии на кнопку вы запускаете другой поток, который выполняет некоторую работу, и после завершения этой работы вы хотите обновить пользовательский интерфейс. Тогда вы используете invokeLater. Этот метод гарантирует, что обновление пользовательского интерфейса будет выполнено в потоке пользовательского интерфейса.

Поэтому во многих случаях вам не нужен invokeLater, вы можете просто выполнять обновление UI напрямую. Если вы не уверены, вы можете использовать isDispatchThread , чтобы проверить, выполняется ли ваш текущий код в потоке диспетчеризации событий.

26
ответ дан 30 November 2019 в 21:02
поделиться

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

2
ответ дан 30 November 2019 в 21:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: