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
}
}
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
}
}