public void uncaughtException(Thread t, Throwable e) {
   if (e instanceof Error) {
     // Speicherreserve freigeben, damit die Ausgaben nach einem OutOfMemoryError funktionieren
     _reserve = null;
     try {
       System.err.println(
           "Schwerwiegender Laufzeitfehler: Ein Thread hat sich wegen eines Errors beendet, Prozess wird terminiert");
       System.err.println(t);
       e.printStackTrace(System.err);
       _debug.error(
           "Schwerwiegender Laufzeitfehler: "
               + t
               + " hat sich wegen eines Errors beendet, Prozess wird terminiert",
           e);
     } catch (Throwable ignored) {
       // Weitere Fehler während der Ausgaben werden ignoriert, damit folgendes exit() auf jeden
       // Fall ausgeführt wird.
     }
     System.exit(1);
   } else {
     System.err.println("Laufzeitfehler: Ein Thread hat sich wegen einer Exception beendet:");
     System.err.println(t);
     e.printStackTrace(System.err);
     _debug.error("Laufzeitfehler: " + t + " hat sich wegen einer Exception beendet", e);
   }
 }
 /**
  * Diese Methode erstellt eine Verbindung zum Datenverteiler anhand der Standard-Parameter her.
  *
  * @param application Applikation, die eine Verbindung zum Datenverteiler benötigt.
  * @param applicationTypePid Pid des Applikationstyps. Der Datenverteiler erzeugt für die
  *     Appliaktion ein Objekt dieses Typs. Der Applikationstyp sollte "typ.applikation" sein oder
  *     davon abgeleitet sein.
  * @param args Aufrufargumente der Applikation
  */
 public static void run(
     StandardApplication application, String applicationTypePid, String[] args) {
   createApplicationLabel(args);
   final ArgumentList argumentList = new ArgumentList(args);
   initializeDebug(application, argumentList);
   Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler());
   try {
     // ArgumentListe wird in ClientDavParameters konvertiert
     final ClientDavParameters parameters = new ClientDavParameters(argumentList);
     parameters.setApplicationTypePid(applicationTypePid);
     parameters.setApplicationName(_applicationName);
     // zuerst darf die Applikation die ArgumentListe durcharbeiten
     application.parseArguments(argumentList);
     argumentList.ensureAllArgumentsUsed();
     final ClientDavInterface connection = new ClientDavConnection(parameters);
     // Fertigmeldung für Start/Stop wird eplizit selbst übernommen
     establishConnection(connection);
     _applicationLabel.append(
         connection.getLocalConfigurationAuthority().getPid()); // ApplikationsKennung
     MessageSender.getInstance().init(connection, _applicationName, _applicationLabel.toString());
     application.initialize(connection);
     // Fertigmeldung wird gesendet
     connection.sendApplicationReadyMessage();
   } catch (Exception ex) {
     _debug.error("Fehler", ex);
     System.exit(1);
   }
 }
  /**
   * Diese Methode startet einen Login-Dialog und meldet sich anhand der eingetragenen IP-Adresse,
   * Portnummer, Benutzername und Passwort beim Datenverteiler an.
   *
   * @param application Applikation, die eine Verbindung zum Datenverteiler benötigt.
   * @param applicationTypePid Pid des Applikationstyps. Der Datenverteiler erzeugt für die
   *     Appliaktion ein Objekt dieses Typs. Der Applikationstyp sollte "typ.applikation" sein oder
   *     davon abgeleitet sein.
   * @param args Aufrufargumente der Applikation
   */
  public static void run(GUIApplication application, String applicationTypePid, String[] args) {
    createApplicationLabel(args);
    final ArgumentList argumentList = new ArgumentList(args);
    initializeDebug(application, argumentList);
    Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler());
    try {
      // soll der Login-Dialog überhaupt angezeigt werden?
      boolean autoLogin = argumentList.fetchArgument("-autologin=false").booleanValue();
      if (autoLogin) {
        if (!(argumentList.hasArgument("-benutzer")
            && argumentList.hasArgument("-authentifizierung"))) {
          if (argumentList.hasArgument("-benutzer")) argumentList.fetchArgument("-benutzer");
          if (argumentList.hasArgument("-authentifizierung")) {
            argumentList.fetchArgument("-authentifizierung");
          }
          _debug.warning(
              "Der Login-Dialog wird trotz des Aufrufparameters '-autologin' aufgerufen, da die Parameter '-benutzer' und '-authentifizierung' "
                  + "unvollständig oder nicht korrekt angegeben wurden.");
          autoLogin = false;
        }
      }

      // ArgumentListe wird in ClientDavParameters konvertiert
      final ClientDavParameters parameters = new ClientDavParameters(argumentList);
      // zuerst darf die Applikation die ArgumentListe durcharbeiten
      parameters.setApplicationTypePid(applicationTypePid);
      parameters.setApplicationName(_applicationName);
      application.parseArguments(argumentList);
      argumentList.ensureAllArgumentsUsed();

      //			System.out.println("IP: " + parameters.getDavCommunicationAddress() + " Port: " +
      // parameters.getDavCommunicationSubAddress());
      ClientDavInterface connection = null;
      if (autoLogin) {
        connection = new ClientDavConnection(parameters);
        // Verbindung aufbauen (inkl. Anmelden zur Fertigmeldung für Start/Stop)
        establishConnection(connection);
      } else {
        // Login-Dialog aufrufen, der eine Verbindung zum Datenverteiler aufbaut und zurückgibt.
        connection = application.connect(parameters);
      }
      if (connection != null) {
        _applicationLabel.append(
            connection.getLocalConfigurationAuthority().getPid()); // ApplikationsKennung
        MessageSender.getInstance()
            .init(connection, _applicationName, _applicationLabel.toString());
        application.initialize(connection);
        // Fertigmeldung senden
        connection.sendApplicationReadyMessage();
      } else {
        throw new RuntimeException(
            "Die Verbindung zum Datenverteiler konnte nicht hergestellt werden.");
      }
    } catch (Exception ex) {
      _debug.error("Fehler in der Applikation", ex);
      System.exit(1);
    }
  }