Подтвердить что ты не робот

Что такое SwingUtilities.invokeLater

Возможный дубликат:
Что делает SwingUtilities.invokeLater?
SwingUtilities.invokeLater

Я видел этот маленький кусок кода сотни раз:

public static void main(String[] args) {
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
          createAndShowGUI();
        }
    });
}

Теперь мой вопрос: что делает invokeLater()? Какие плохие вещи произойдут, если я просто создам и покажу свой графический интерфейс внутри основного потока?

4b9b3361

Ответ 1

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

То есть...

Если invokeLater вызывается из потока диспетчеризации событий - для Например, из JButton ActionListener - doRun.run() будет по-прежнему отложить до тех пор, пока все незавершенные события не будут обработаны.

Источник

Если это не так, требуется invokeLater().

Он планирует a Runnable, который будет выполнен в EDT (поток диспетчеризации событий).

Ответ 2

1. Event Dispatcher Thread - это поток GUI.

2. Если вы говорите о main() method... затем , он не долго жил в Java Gui.      main() после планирования построения GUI в EDT завершает работу, теперь его EDT, который обрабатывает GUI.

3. invokeLater означает, что этот вызов будет немедленно возвращаться, когда событие помещается в очередь диспетчера событий, а метод run() будет работать асинхронно...

Ответ 3

Swing не является потокобезопасным, и все изменения объектов Swing должны выполняться в Thread Dispatch Thread. Если вы попытаетесь запустить свой код за его пределами, вы получите неуказанное поведение, которое, вероятно, в какой-то момент станет странным.

Напротив, инфраструктура GUI SWT/JFace, используемая Eclipse, утверждает правильный поток в каждой публичной точке входа.