Ich mache ein einfaches Chat-Programm mit Sockets, und ich habe eine ArrayList, um aktive objected Klassen mit Sockets und Benutzernamen für jeden angeschlossenen Client zu speichern, und innerhalb dieser Klassen überprüft es, ob der Socket ist immer noch offen, und ruft zu sich selbst zu verbinden, wenn es nicht ist.Java-Programm hängt beim Beitritt zu einem Thread
Server Datei Kick Code:
public synchronized void kick(ClientThread client){
try{
output.printLine("kicking " + client.getUsername());
clients.remove(client);
output.printLine("removed " + client.getUsername());
}catch(Exception e){
e.printStackTrace();
}
output.printLine("kicked ");
}
Dies ist, was durch das Client-Objekt aufgerufen wird, wenn die Fassung geschlossen ist.
Kunden ist die Arraylist, die die Kunden
Client ist das Klassenobjekt speichert, die ich anschließen möchten, erstreckt sich das Client-Objekt Thema
public void run(){
while(true){
try{
Thread.sleep(10);
if(isValid()){
/*bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
if(bufferedReader.ready()){
lastMsg = bufferedReader.readLine();
sendMessage("Hello");
bufferedReader.close();
}*/
}else{
output.printLine(this.getUsername() + " connection closed");
break;
}
}catch(Exception e){
e.printStackTrace();
}
}
server.kick(this);
try {
join();
} catch (InterruptedException e) {
e.printStackTrace();
}
output.printLine("joined " + getUsername());
}
Dies ist die Lauffunktion vom Client-Objekt, bei Die Unterseite ist der Code, der ausgeführt wird, wenn der Socket nicht verbunden ist, er bricht aus der Schleife und sollte sich selbst verbinden, jedoch bleibt er hängen, wenn er sich selbst anschließt. Der Client wird ordnungsgemäß aus der ArrayList entfernt, aber egal was ich tue, ich kann den Thread nicht dazu bringen, beizutreten.
_soll sich selbst anschließen_ Was bedeutet das? –