public void start() {
        this.loginDialog = new LoginDialog();

        this.loginDialog.setAction(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // um einen fehlerhaften Usernamen erneut eingeben lassen zu koennen.
                if (!GUI.this.loginDialog.validation()) {
                    GUI.this.loginDialog.setAction(new ActionListener() {

                        @Override
                        public void actionPerformed(ActionEvent e) {
                            if (GUI.this.loginDialog.validation()) {
                                startRest();
                            }
                        }
                    });

                }

                if (GUI.this.loginDialog.validation()) {

                    startRest();
                }
            }

            private void startRest() {

                // Login Dialog schließen und Hauptfenster erzeugen aber noch nicht anzeigen
                GUI.this.loginDialog.dispose();
                GUI.this.guiView = new GUIView();
                GUI.this.guiView.setVisible(false);

                // Eingabe zwischenspeichern zum erzeugen der Verbindung
                String hostName = GUI.this.loginDialog.getHostName();
                String userName = GUI.this.loginDialog.getUserName();

                // Starte TCPClient
                TCPClient tcpVerbindung = new TCPClient(hostName, GUI.this.TCP_PORT);

                // Chat System initialisieren
                GUI.this.chatClient = null;

                try {
                    UDPClient udpVerbindung = new UDPClient();

                    GUI.this.chatClient = new ChatClient(tcpVerbindung, udpVerbindung, GUI.this.guiView);
                    GUI.this.chatClient.init(userName);

                    //Start von Empfang der UPD Nachrichten
                    Thread t = new Thread(GUI.this.chatClient);
                    t.start();
                } catch (SocketException ex) {
                    Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, null, ex);
                    System.out.println("Auf Port 50000 wird bereits, von einem anderen Prozess gehorcht");
                }

                GUI.this.guiView.setVisible(true);

                // Beenden
                GUI.this.guiView.getBye().addActionListener(new ActionListener() {

                    @Override
                    public void actionPerformed(ActionEvent e) {
                        GUI.this.guiView.dispose();
                        System.exit(0);
                    }
                });

            }
        });
    }