2012-03-19 13 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

答えて

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メソッドから返すことです。

関連する問題