Новое в Java Swing здесь. Вот мой основной класс:
public class MyApp {
private JFrame entireSwingApp;
// Dependency-injection module
private MyAppModule module = new MyAppModule();
public static void main(String[] args) {
new MyApp().run();
}
private void run() {
entireSwingApp = module.injectEntireSwingApp();
SwingUtilities.invokeLater(() -> {
JFrame.setDefaultLookAndFeelDecorated(true);
entireSwingApp.pack();
entireSwingApp.setVisible(true);
}
}
}
Выше свойство entireSwingApp: JFrame
является главным окном приложения Swing и содержит все , что находится внутри приложения (меню,все различные экраны, панели, компоненты, прослушиватели событий и т. д. * все ).
Таким образом, метод run
выполняется изнутри основногопоток приложения, как и метод инжектора MyAppModule#injectEntireSwingApp
DI. Это означает, что, как у меня сейчас настроено, все (включая прослушиватели событий) создано в главном потоке приложения и, следовательно, за пределами Thread Dispatcher Thread (EDT) .
Однако затем я вызываю entireSwingApp.setVisible(true)
изнутри SwingUtilities.invokeLater
лямбды. Я надеюсь, что хотя я создаю весь код GUI извне EDT, что, сделав это, я каким-то образом буду запускать код GUI на EDT.
Это довольно типичная установка для компонентов Swing / GUI и внедрения зависимостей? Учитывая мои настройки выше, мой код GUI будет правильно работать на EDT?