# Chat Server starten über GUI problem



## jalako (15. Jan 2016)

Hallo ich bins mal wieder,

Ich bin gerade dabei einen Chat zu schreiben. Auf meinem Server wird der Server ausgeführt und andere können dann den Clienten starten und da schreibe. Das funktioniert auch schon soweit, allerdings wollte ich jetzt ein kleines GUI machen um den Server zu starten bzw. zu stoppen, das klappt in geringen Maße. Problem ist: Wenn ich den "Start" Knopf drücke startet der Server zwar, jedoch freezt dann das GUI und ich kann nichts mehr daran rütteln sprich er ist so gesehen tot. Der Knopf ist gerade eingedrückt und ab dem Zeitpunkt geht nichts mehr, nicht mehr der "X" Knopf des GUI´s ich muss also über terminate alles schließen. Ich will aber natürlich noch den "Stop" Knopf bedienen was so natürlich nicht geht.

Code:


```
JButton start = new JButton("Server starten");
        start.addMouseListener(new MouseAdapter(){
            @Override
            public void mouseClicked(MouseEvent e){
                statuslabel.setText("Server an!");
                Server.main(null);
            }
        });
```

der Code startet beim Klick auf den Knopf die Main des Servers:


```
public static void main(String[] args) {
                Server s = new Server();
                if (s.runServer()) {
                        s.listenToClients();
                } else {
                }
        }
```

Wenn benötigt kann ich noch den restlichen Code zeigen, allerdings brauche ich nur eine Möglichkeit wie ich quasi den Server separiert vom GUI laufen lassen kann, sodass ich an dem noch rumspielen kann.

So sieht der GUI aus nach dem Drück auf Starten:


----------



## Joose (15. Jan 2016)

Du führst den Server Thread im UI Thread aus. Dadurch wird ein neuzeichnen der UI verhindert und "sie friert ein".
Lagere den Auruf/Start des Server in einen eigenen Thread aus, dann sollte es klappen


----------



## jalako (15. Jan 2016)

Funktioniert jetzt alles nur wie kann ich einen Thread "killen" alle Funktionen die sowas in der art bringen_ sind deprecated _


----------



## Joose (15. Jan 2016)

Ein Thread beendet sich von selber wenn aller Code vom Runnable abgearbeitet wurde.
Ich nehme an du hast in der Methode "listenToClients" der Klasse Server eine Endlosschleife. Am einfachsten wäre eine "stop" Methode zu schreiben, diese rufst du auf wenn du auf den "Stoppen" Button drückst. Die "stop" Methode sorgt dafür das die Endlosschleife nicht mehr ausgeführt wird. Aller Code wird ausgeführt und der Thread sollte sich beenden.
Das wäre die saubere Art und Weise diesen Thread zu beenden.

Die unsaubere wäre einfach "interrupt" vom Thread Objekt aufzurufen.


----------



## jalako (16. Jan 2016)

Ja "interrupt" ist sowieso keine Möglichkeit, der Port ist dann weiterhin belegt... habe es aber jetzt hinbekommen. Danke für deine Hilfe


----------

