Почему основное использование Java Swing доступно для выполнения

#java #swing

Вопрос:

Я изучаю Java Swing. Поэтому иногда я вижу такие коды, как следующие, в основном:-

     public static void main(String args[]) {
    // create an example of the data structure
    HashMap<String, String[]> attributes
            = new HashMap<String, String[]> ();
    attributes.put("fruits", new String[]{"apples", "peaches"});
    attributes.put("drugs", new String[]{"euthanasipame", "aspirine", "analgine"});

    // create a ComboFest
    ComboFest fest = new ComboFest(attributes);
    fest.setPreferredSize(new Dimension(400, 260));

    // create a window and display the ComboFest in it
    final JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    frame.add(fest);
    frame.pack();
    java.awt.EventQueue.invokeLater(new Runnable() {
        @Override public void run() { frame.setVisible(true); }
    });
}
 

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

Комментарии:

1. В общем случае весь код, который создает компоненты Swing, должен быть в исполняемом, а не только в setVisible(…). Swing однопоточен. Неиспользование запускаемого устройства может вызвать случайные проблемы, а отладка случайных проблем затруднена, если не невозможна. Прочитайте раздел из руководства Swing по параллелизму для получения дополнительной информации и примеров о том, как структурировать код, чтобы убедиться, что вы создаете компоненты и обновляете графический интерфейс в EDT.