Слушатели событий Java Swing для нескольких источников событий в однопоточной среде - PullRequest
7 голосов
/ 21 января 2011

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

Кроме того, мне интересно узнать, как работает обработка событий Swing в однопоточной среде, особенно когда у вас есть несколько прослушивателей для одного источника события.

Наконец, я хотел бы знать некоторые распространенные случаи, когда мне приходится использовать несколько потоков в Swing.

Спасибо!

1 Ответ

12 голосов
/ 21 января 2011

Я постараюсь ответить на все 3 ваших вопроса. Прежде всего, порядок, в котором огонь ActionListener не указан. Никогда не следует принимать определенный порядок, что они будут стрелять. Если вам нужно, чтобы действия выполнялись в определенном порядке, поместите их в те же ActionListener.

При программировании на Swing вы «почти» всегда будете в многопоточной среде. Существует один поток, называемый потоком отправки событий (EDT). Это поток, который обрабатывает все события. Любая другая обработка, которую вы выполняете, должна выполняться в другом потоке, в противном случае ваш графический интерфейс Swing может перестать отвечать.

Распространенным случаем для нескольких потоков в Swing является любое время, когда вам нужно выполнить некоторую обработку, которая занимает продолжительное время. (Интенсивные вычисления, ввод-вывод, соединения с базой данных). Вам нужно будет выполнить тяжелую работу в отдельном потоке от EDT. Это будет держать ваш графический интерфейс отзывчивым.

В сети Oracle есть отличный учебник по параллелизму в Swing. Я рекомендую вам проверить это .

Программист Swing имеет дело со следующими видами потоков:

  • Начальные потоки, потоки, которые выполняют исходный код приложения.
  • Поток отправки событий, где выполняется весь код обработки событий. Большая часть кода, взаимодействующего с платформой Swing, также должна выполняться в этом потоке.
  • Рабочие потоки, также известные как фоновые потоки, в которых выполняются трудоемкие фоновые задачи.

Каноническим ответом на любые вопросы о многопоточности в Swing является использование SwingWorker. Это позволяет легко координировать фоновую работу в отдельном потоке с EDT. Как обычно, у Oracle есть отличный учебник по использованию SwingWorker.

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