作者mio86 (米歐掰溜)
看板java
標題[問題] 結束Thread的方法
時間Wed Dec 30 16:15:56 2009
在做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