Nano Hash - криптовалюты, майнинг, программирование

Java Swing Multiple Event Listeners для одного источника событий в однопоточной среде

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

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

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

Спасибо!


Ответы:


1

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

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

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

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

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

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

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

21.01.2011
  • Мне не хватает прямого упоминания о SwingWorker, но в остальном это очень хороший ответ. 21.01.2011
  • @extraneon: да SwingWorker — это канонический ответ на многопоточность в Swing. Я добавлю быстрый крик к нему в конце. 21.01.2011
  • С точки зрения дизайна можно создать ActionListener, для которого вы можете зарегистрировать другие ActionListeners (или другой класс), которые могут выполняться в том порядке, в котором они установлены. 21.01.2011
  • @extra: вы можете разработать код, который будет выполнять ActionListeners в определенном порядке. Но в целом ядро ​​Swing не определяет порядок. 21.01.2011
  • @jjnguy Спасибо за хорошо объясненный ответ ... !! 20.04.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..