Я постараюсь ответить на все 3 ваших вопроса. Прежде всего, порядок, в котором огонь ActionListener
не указан. Никогда не следует принимать определенный порядок, что они будут стрелять. Если вам нужно, чтобы действия выполнялись в определенном порядке, поместите их в те же ActionListener
.
При программировании на Swing вы «почти» всегда будете в многопоточной среде. Существует один поток, называемый потоком отправки событий (EDT). Это поток, который обрабатывает все события. Любая другая обработка, которую вы выполняете, должна выполняться в другом потоке, в противном случае ваш графический интерфейс Swing может перестать отвечать.
Распространенным случаем для нескольких потоков в Swing является любое время, когда вам нужно выполнить некоторую обработку, которая занимает продолжительное время. (Интенсивные вычисления, ввод-вывод, соединения с базой данных). Вам нужно будет выполнить тяжелую работу в отдельном потоке от EDT. Это будет держать ваш графический интерфейс отзывчивым.
В сети Oracle есть отличный учебник по параллелизму в Swing. Я рекомендую вам проверить это .
Программист Swing имеет дело со следующими видами потоков:
- Начальные потоки, потоки, которые выполняют исходный код приложения.
- Поток отправки событий, где выполняется весь код обработки событий. Большая часть кода, взаимодействующего с платформой Swing, также должна выполняться в этом потоке.
- Рабочие потоки, также известные как фоновые потоки, в которых выполняются трудоемкие фоновые задачи.
Каноническим ответом на любые вопросы о многопоточности в Swing является использование SwingWorker
. Это позволяет легко координировать фоновую работу в отдельном потоке с EDT. Как обычно, у Oracle есть отличный учебник по использованию SwingWorker
.