Свинг, внедрение зависимостей и EDT на примере - PullRequest
0 голосов
/ 03 октября 2019

Новое в 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?

...