Hi,
hab ne Frage zu Exceptions bzw. zum selbstdefinieren, was bei einer Exception passieren soll.
Geht das, dass man bei nem try/catch-Block im catch-Teil selbst etwas definiert, was im Falle einer Exception
passieren soll?
Hier mal der Code:
Dieser Thread wird beim Serverstart angeschubst und befindet sich dann in einer Endlosschleife.
Hier soll sekündlich überprüft werden, welche Clients (soll ein Chat werden) noch online sind.
Sprich, ich schicke einfach irgendwas an jeden einzelnen, bis dahin gespeicherten, Client.
Kommt es an, passts und es muss nix geändert werden. Ist der Client allerdings schon off,
müsste ja eigentlich ne Exception kommen, dass der Socket closed is oder sowas ähnliches.
Und da will ich dann eben im catch-Teil einhaken, den Client aus meiner Liste werfen und an alle
aktiven Clients den neuen Stand senden.
Der catch-Teil ist natürlich noch lang nicht fertig, soll nur mal zum veranschaulichen sein.
Dazu dann noch eine Frage:
Angenommen, es sind momentan 5 User online. User 3 geht nun off. Meine Schleife schmeißt nun bei User 3
die Exception, dieser wird gelöscht. Checkt in diesem Fall die for-Schleife noch die restlichen User?
Oder wird sogar die while-Schleife oder der Thread durch die Exception beendet?
Würde es klappen, in dem Fall am Schluß des catch-Teils den Thread mit this.start(); wieder anzuschubsen?
Wenn natürlich nur die for-Schleife beendet wird, aber die while-Schleife wieder neu beginnt, ist das ganz natürlich hinfällig
Danke im Voraus!
Gruß, Kizz
P.S.: Nur so am Rande: Denkt ihr, die Performanz leidet bei sowas arg, wenn mehrere User angemeldet sind?
Oder fällt das nicht ins Gewicht?
Vielleicht hat auch jemand ne andere Möglichkeit, sowas zu realisieren.
Bzw. wärs natürlich am idealsten, wenn der Client als allerletzte Aktion einen Befehl schicken könnte, dass er nun gleich off ist. Man könnte nun natürlich einen "Schließen"-Button in der GUI einfügen, aber es gibt ja genug Leute, die auf das kleine x rechts oben klicken und wie ich das dann machen kann, dass noch ein letzter Befehl verschickt wird, weiß ich leider nicht.
hab ne Frage zu Exceptions bzw. zum selbstdefinieren, was bei einer Exception passieren soll.
Geht das, dass man bei nem try/catch-Block im catch-Teil selbst etwas definiert, was im Falle einer Exception
passieren soll?
Hier mal der Code:
Dieser Thread wird beim Serverstart angeschubst und befindet sich dann in einer Endlosschleife.
Hier soll sekündlich überprüft werden, welche Clients (soll ein Chat werden) noch online sind.
Sprich, ich schicke einfach irgendwas an jeden einzelnen, bis dahin gespeicherten, Client.
Kommt es an, passts und es muss nix geändert werden. Ist der Client allerdings schon off,
müsste ja eigentlich ne Exception kommen, dass der Socket closed is oder sowas ähnliches.
Und da will ich dann eben im catch-Teil einhaken, den Client aus meiner Liste werfen und an alle
aktiven Clients den neuen Stand senden.
Code:
class CheckUsers extends Thread{
Server server;
String c;
public CheckUsers(Server s){
this.server=s;
}
public void run(){
while(true){
try{
for (Enumeration e = server.clients.keys();e.hasMoreElements();){
c=(String)e.nextElement();
((ServerBody)server.clients.get(c)).send(" ");
}
}catch(Exception e){
server.clients.remove(c);
}
try{
this.sleep(1000);
}catch(Exception e){e.printStackTrace();}
}
}
}
Dazu dann noch eine Frage:
Angenommen, es sind momentan 5 User online. User 3 geht nun off. Meine Schleife schmeißt nun bei User 3
die Exception, dieser wird gelöscht. Checkt in diesem Fall die for-Schleife noch die restlichen User?
Oder wird sogar die while-Schleife oder der Thread durch die Exception beendet?
Würde es klappen, in dem Fall am Schluß des catch-Teils den Thread mit this.start(); wieder anzuschubsen?
Wenn natürlich nur die for-Schleife beendet wird, aber die while-Schleife wieder neu beginnt, ist das ganz natürlich hinfällig
Danke im Voraus!
Gruß, Kizz
P.S.: Nur so am Rande: Denkt ihr, die Performanz leidet bei sowas arg, wenn mehrere User angemeldet sind?
Oder fällt das nicht ins Gewicht?
Vielleicht hat auch jemand ne andere Möglichkeit, sowas zu realisieren.
Bzw. wärs natürlich am idealsten, wenn der Client als allerletzte Aktion einen Befehl schicken könnte, dass er nun gleich off ist. Man könnte nun natürlich einen "Schließen"-Button in der GUI einfügen, aber es gibt ja genug Leute, die auf das kleine x rechts oben klicken und wie ich das dann machen kann, dass noch ein letzter Befehl verschickt wird, weiß ich leider nicht.