public static void main(String[] args) {
    SwingUtilities.invokeLater(
        () -> {
          // Set default window title for message boxes
          System.setProperty(
              CMessageBox.DEFAULT_WINDOW_TITLE_PROPERTY, Constants.DEFAULT_WINDOW_TITLE);

          // The config file must be initialized before the logger
          initializeConfigFile();
          initializeLogging();

          logger.atInfo().log(
              "Starting %s (Java %s)", Constants.PRODUCT_NAME_VERSION, JAVA_VERSION.value());
          initializeTheme();

          if (Desktop.isDesktopSupported()) {
            initializeDesktop(Desktop.getDesktop());
          }

          String[] positional = parseCommandLine(args);
          initializeGlobalTooltipDelays();
          initializeStandardHotKeys();

          var workspace = new Workspace();
          var window = new MainWindow(workspace);
          window.setVisible(true);

          controller =
              window.getController().getTabPanelManager().getWorkspaceTabPanel().getController();

          initializeSocketServer(window, controller);

          if (positional != null && positional.length > 0) {
            controller.loadWorkspace(positional[0]);
          }
        });
  }
Program entry point. Sets up the configuration file, initializes the logging system and creates
the UI.

@param args command line arguments.
java/ui/src/main/java/com/google/security/zynamics/bindiff/BinDiff.java