[問題] 退出聊天室程式, Stop Thread 問題

看板java作者 (蔥頭)時間10年前 (2015/07/05 00:53), 編輯推噓2(204)
留言6則, 3人參與, 最新討論串1/2 (看更多)
狀況描述 : 請問一下各位, 以下程式碼是我聊天室Client端的Thread, 功能是當接收到Server發出客戶列表訊息, 則刷新UI更新名單 ~ 我想請問一下, 假設現在Client要關閉UI退出程式, 那要如何關閉ClientConnectThread (Thread.stop(因不安全所以不使用)),我目前想到的做法是 Client 通知 Server關閉, Server收到後再返回一個訊息, 這時ClientConnectThread接收到訊息後 則break離開迴圈,Thread停止 . 但我覺得這方法不太好, 因為還要等待Server的回覆 疑問 : 有沒有辦法當我關閉UI, 就直接停止ClientConnectThread ? public class ClientConnectThread extends Thread { public void run() { try { while(true) { byte[] buf = new byte[5000]; int length = is.read(buf); String xml = new String(buf, 0, length); int type = Integer.parseInt(XMLUtil.extracType(xml)); if( type == CharacterUtil.USERT_LIST ) { List<String> list = XMLUtil.extractUserList(xml); String users = ""; for(String user : list) { users += user + "\n"; } this.chatClient.getJTextArea1().setText(users); } } } catch (Exception ex) {} } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.34.181.227 ※ 文章網址: https://www.ptt.cc/bbs/java/M.1436028839.A.BEE.html

07/05 01:01, , 1F
停止Thread的方法最好要自己實作,以你這個例子最簡單的
07/05 01:01, 1F

07/05 01:01, , 2F
方法就是while(flag),再給一個方法去改變flag
07/05 01:01, 2F

07/05 02:15, , 3F
用 thread 的 interrupt 有什麼問題嗎?
07/05 02:15, 3F

07/05 07:52, , 4F
可是如果是用flag, accept()因為會Block,
07/05 07:52, 4F

07/05 07:53, , 5F
所以還是需要有收到Stream才會進續往下跑, 你說的
07/05 07:53, 5F

07/05 07:54, , 6F
flag要如何才可以呼叫和改變啊?
07/05 07:54, 6F
文章代碼(AID): #1Lc0-dlk (java)
文章代碼(AID): #1Lc0-dlk (java)