看板 java 關於我們 聯絡資訊
在做Android上作開發 類似做一個收送封包的程式 再收封包的地方 開了一個thread來執行 但是 想要 利用按下按鈕之後 結束連線 但是都會當掉 class tRecv extends Thread { // isStart 用來讓while迴圈啟動或停止 private boolean isStart = true; public void setIsStart(boolean is) { isStart = is; } public void run() { String line = ""; try{ while (isStart) { // test123.Recv() 是寫一個副函式來執行read的動作 line = test123.Recv(); } }catch(Exception e){ System.out.print("Whoops! Recv didn't work!\n"); } } } 而我啟動的是利用宣告 final tRecv cThread = new tRecv(); 且在一個button按下之後 cThread.setIsStart(true); cThread.start(); 並且按下另一個button // set tRecv 中的isStart變數為 false cThread.setIsStart(false); // test123.ReceiverUnreg 是執行關閉連線的動作 test123.ReceiverUnreg(default_appname, default_psid); 還麻煩大家幫幫忙 這個問題已經卡了好多天了 也在網路上找了不少方法 但是仍然會整個程式卡住 >_____< 自己的猜測 可能是下面其中問題 1. isStart並未被改成false 所以thread無法停止 2. thread卡在 socket listen封包 但是應該會聽一個 timeout時間吧??? skt_rec = new Socket(server_ip_address, server_port_no); in_rec = new BufferedReader(new InputStreamReader(skt_rec.getInputStream())); while (!in_rec.ready()) {} while(in_rec.readLine() != null) { InputData = in_rec.readLine().substring(22); } 拜託大家了Q__________Q -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.96.109.220 ※ 編輯: mio86 來自: 140.96.109.220 (12/30 16:31) ※ 編輯: mio86 來自: 140.96.109.220 (12/30 16:37)
reon:Android 不同Thread傳送資料要靠Message..不能直接傳 12/31 00:38
reon:你的View和Button也是一個Thread.. 注意一下Thread問題 12/31 00:44
reon:你不能直接丟參數給Thread..要透過Message 所以要寫個Handler 12/31 15:19
mio86:謝謝! 我已經解決了^^ 01/27 09:34