Thread/Applet wird nicht korrekt beendet

joergdeymann

Grünschnabel
Thread wird nicht korrekt beendet !

Hallo Community!

In einem Chat ruft der Client einen Server auf, wenn keiner gefunden wird.
Bende ich den Client, indem ich das Browserfenster schließe ist alles ok
Bende ich den Client, indem ich ein Reload mache oder
eine andere Seite eingebe, beendet sich leider der Server nicht korrekt.

Woran kann es liegen ?
Wie kann ich abhilfe schaffen ?


Szenario:
1. Starte Client1 inclusive Server
2. Starte Client2 der sich am Server anmeldet
3. Beende Client1, durch reload
der Client2 bekommt nicht mit, dass der Server weg ist
4. Starte Client1 wieder mit Server, gibt einen harten Abbruch
mit Beendigung einer Exception und Beendigung des Browsers
Jetzt wird auch am Client2 angezeigt, dass der Server weg ist
5. nochmaliger Start geht und der Client2 zeigt auch an dass der
Server wieder da ist



Hier Ausschnitte aus den Quellcodes, die vielleicht zur Lösung
beitragen koennen:

Server-Klasse
-------------
public class CServer extends Runable
...
Thread connect;
...
public CServer() {
connect = new Thread(this);
connect.start();
}
...
public void run() {
while(true) {
// Warte auf connection vom Client
// (ServerSocket.accept() usw)
}
.
.
}
}

Client-Klasse
-------------
public class CClient extends JApplet implements Runnable
{
Thread thread;
CServer server;

public void start() {
// Falls der Server noch nicht gestartet wurde:
server=new CServer()

// Client starten
thread = new Thread(this);
thread.start();

}

public void stop() {
server.stop();
server=null;
socket.close();
thread.stop(); // ist veraltet
tread=null;
}



pubic void run() {
// Warte auf ankommende Nachrichten
}
}
 
Original geschrieben von joergdeymann
Hallo Community!

In einem Chat ruft der Client einen Server auf, wenn keiner gefunden wird.
Bende ich den Client, indem ich das Browserfenster schließe ist alles ok
Bende ich den Client, indem ich ein Reload mache oder
eine andere Seite eingebe, beendet sich leider der Server nicht korrekt.

Woran kann es liegen ?
Wie kann ich abhilfe schaffen ?


Szenario:
1. Starte Client1 inclusive Server
2. Starte Client2 der sich am Server anmeldet
3. Beende Client1, durch reload
der Client2 bekommt nicht mit, dass der Server weg ist
4. Starte Client1 wieder mit Server, gibt einen harten Abbruch
mit Beendigung einer Exception und Beendigung des Browsers
Jetzt wird auch am Client2 angezeigt, dass der Server weg ist
5. nochmaliger Start geht und der Client2 zeigt auch an dass der
Server wieder da ist

Sorry, Applets, Server und Threads sind nicht ganz meine Baustelle, daher habe ich nur eine Idee:
Die Clients registrieren sich als Listener am Server. Und wenn der Server beendet wird, informiert er halt alle angemeldeten Clients darüber, so dass die Clients dann entsprechend reagieren können/sollen.
 
Hilft mir leider nicht weiter!
Wenn ich den Server alleine starte, beendet er sich sobald der letzte Client sich abgemeldet hat.
Nur in Verbindung mit dem Client beendet der Server sich nicht richtig.
 
Zurück