即時通訊新的Java和即時通訊嘗試使客戶端服務器的形式。客戶端和服務器可以相互聊天。所以我的客戶有2個任務的線程:發送和接收消息。我想當我的SendThread從鍵盤字符串「再見」讀取時,我的客戶端將停止2線程。但問題是線程接收仍然執行的BufferedReader聲明的ReadLine(),所以它不能達到出口 這裏是我的我的代碼:如何停止BufferedReader readline()?
try {
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while (!stop) {
String temp = br.readLine();
if (temp.length() == 0) {
Thread.sleep(100);
}
else System.out.println(" Receiving from server: " + temp);
}
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
更新:對不起大家,因爲我不解釋更清晰。我的客戶有2個線程獨立運行。因此,此代碼所在的ReceiveThread可以一直等待來自服務器的消息。 SendThread也一直從鍵盤讀取數據。所以當我輸入「Bye」時,SendThread讀取這個字符串並停止客戶端。問題是ReceiveThread正在執行readLine()
,因此無法自行停止。當有流的末尾
'而(!停止)'怪條件,因爲你不改變'stop'。 – Tom
當我關閉我的SendThread時,'stop'會改變。我不會在這裏發佈代碼 –
如果服務器關閉了套接字,你是否關閉該線程?因爲這是你想停止閱讀的條件之一。你在哪裏處理收到的消息「再見」?如果試圖更改代碼時「無處」,則可以檢測到封閉的流或消息「再見」。目前的答案可能會幫助你。 – Tom