Во многих фрагментах Swing, приведенных здесь в качестве ответов, есть вызов SwingUtilities#invokeLater
из метода main
:
public class MyOneClassUiApp {
private constructUi() {
// Some Ui related Code
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new MyOneClassUiApp().constructUi();
}
});
}
}
Но согласно статье Threads and Swing, безопасно создавать пользовательский интерфейс из основного потока:
Несколько методов являются потокобезопасными: в документации Swing API, поточно-безопасные методы отмечены этим текстом:
Этот метод является потокобезопасным, хотя большинство методов Swing не являются.
Графический интерфейс приложения часто может быть сконструирован и показан в основном thread: следующий типичный код является безопасным, если никакие компоненты (Swing или иначе):
public class MyApplication {
public static void main(String[] args) {
JFrame f = new JFrame("Labels");
// Add components to
// the frame here...
f.pack();
f.show();
// Don't do any more GUI work here...
}
}
Итак, существует ли реальная (потоковая безопасность) причина для создания пользовательского интерфейса в основном через SwingUtilities#invokeLater
, или это просто привычка, помнить об этом в других случаях?