Лучшая практика для запуска Swing-приложения

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

Я хочу знать, нужно ли мне использовать класс SwingUtilities для запуска приложения (вторая возможность) или нет (первая возможность).

public class MyFrame extends JFrame {

public void createAndShowGUI() {
    this.setSize(300, 300);
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    // add components and stuff
    this.setVisible(true);
}

public static void main(String[] args) {

    // First possibility
    MyFrame mf = new MyFrame();
    mf.createAndShowGUI();

    // Secound possibility
    SwingUtilities.invokeLater(new Runnable() {

        @Override
        public void run() {
            MyFrame mf = new MyFrame();
            mf.createAndShowGUI();
        }
    });
}

}


person Charmin    schedule 24.09.2013    source источник


Ответы (1)


Только второй способ правильный. Компоненты Swing должны быть созданы и доступны только в потоке диспетчеризации событий. См. параллелизм в разгаре. Соответствующая цитата:

Почему исходный поток просто не создает сам графический интерфейс? Потому что почти весь код, который создает компоненты Swing или взаимодействует с ними, должен выполняться в потоке диспетчеризации событий. Это ограничение обсуждается далее в следующем разделе.

Так что да, вам нужно использовать invokeLater().

person kiheru    schedule 24.09.2013
comment
Спасибо за Ваш ответ. Ссылка в вашем ответе очень полезна! - person Charmin; 24.09.2013
comment
@Майк, пожалуйста. Это и остальная часть руководства по свингу действительно стоит прочитать. - person kiheru; 24.09.2013