#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.