Мой вопрос на этот раз связан с SwingUtilities.invokeLater
: когда мне его использовать?
Что важно понять, так это то, что Java имеет отдельный поток (EDT), обрабатывающий Swing, связанныйevents.
Вы должны использовать invokeLater()
для отображения основного JFrame
настольного приложения (например), вместо того, чтобы пытаться сделать это в текущем потоке.Это также создаст контекст для корректного закрытия приложения позже.
Это касается большинства приложений.
Нужно ли использовать каждый раз, когда мне нужно обновить компоненты графического интерфейса?Что именно он делает?
Нет.Если вы измените компонент GUI, он вызовет событие, которое зарегистрировано для последующей отправки Swing.Если есть слушатель для этого события, поток EDT будет вызывать его где-нибудь в будущем.Вам не нужно использовать invokeLater()
, просто правильно установите слушателей на компоненты.
Имейте в виду, что эта нить - та же самая рамка рисования нити и т. Д. ... на вашем экране.Следовательно, слушатели не должны выполнять сложные / длинные / ресурсоемкие задачи, в противном случае ваш экран зависнет.
Есть ли альтернатива этому, поскольку он не звучит интуитивно понятным и добавляет, казалось бы, ненужный код?
Вам не нужно писать больше кода, чем показывать ваше приложение с invokeLater()
+ слушателями, которые вас интересуют в компоненте.Остальное обрабатывает Swing.