2012-03-19 144 views
1

我需要知道如何在這個程序停止線程:如何停止Java線程?

public class MasterServerThread extends Thread{ 
private Socket socket = null; 
private MasterServer server = null; 
private int clientID = -1; 
private BufferedReader streamInput = null; 
private PrintWriter streamOutput = null; 

public MasterServerThread(MasterServer _server, Socket _socket){ 
    server = _server; 
    socket = _socket; 
    clientID = _socket.getPort(); 
} 

public void run(){ 
    server.Log("Server Thread " +clientID + " running"); 
    while(true){ 
     String test; 
     try { 
      test = streamInput.readLine(); 
      System.out.println("Client "+clientID+": "+test); 
     } catch (IOException e) { 
      System.out.println(clientID+ " Error reading: "+e.getMessage()); 
     } 
      server.handleClient(clientID, "test"); 

    } 
} 
} 

這是我的服務器線程的代碼。當我的客戶自行終止,我得到的錯誤的無限循環:

53088讀取錯誤:連接重置0

我知道需要在這裏做什麼,但我不知道是什麼,正是:

 try { 
     test = streamInput.readLine(); 
     System.out.println("Client "+clientID+": "+test); 
    } catch (IOException e) { 
     System.out.println(clientID+ " Error reading: "+e.getMessage()); 
    } 
+1

令人驚歎的是,雖然(真正)循環實際上永遠運行... – meriton 2012-03-19 22:01:38

回答

4

你應該處理您的IOException更好,只是返回(或中斷)從while(true)循環。我不確定是否有任何情況下您想要在BufferedReader之後繼續讀取此類異常之後的讀數。

try { 
    test = streamInput.readLine(); 
    System.out.println("Client "+clientID+": "+test); 
} catch (IOException e) { 
    System.out.println(clientID+ " Error reading: "+e.getMessage()); 
    // you need the return line here -- or a break 
    return; 
} 
0

在連接重置的情況下,您最好的選擇是從run方法返回,這將停止一個線程。