code: private void launchMyRichClient() {
  
          if (startupContext == null) {
              displaySplashScreen(rootApplicationContext);
          }
  
          final Application application;
  
          try {
              application = rootApplicationContext.getBean(Application.class);
          }
          catch (NoSuchBeanDefinitionException e) {
              throw new IllegalArgumentException(
                      "A single bean definition of type "
                      + Application.class.getName()
                      + " must be defined in the main application context",
                      e);
          }
  
          try {
              // To avoid deadlocks when events fire during initialization of some swing components
              // Possible to do: in theory not a single Swing component should be created (=modified) in the launcher thread...
              SwingUtilities.invokeAndWait(new Runnable() {
                  public void run() {
                      application.start();
                  }
              });
          }
          catch (InterruptedException e) {
              logger.warn("Application start interrupted", e);
          }
          catch (InvocationTargetException e) {
              Throwable cause = e.getCause();
              throw new IllegalStateException("Application start thrown an exception: " + cause.getMessage(), cause);
          }
  
          logger.debug("Launcher thread exiting...");
  
      }
docs: Launches the rich client application. If no startup context has so far
  been provided, the main application context will be searched for a splash
  screen to display. The main application context will then be searched for
  the {@link Application} to be launched.