2013-11-25 104 views
1

我創建一個線程(服務器)從輸入(System.in)中讀取字符串並向客戶端發送輸出,並且當我嘗試關閉流時 我收到此錯誤:當我調用此方法時無法訪問的代碼此功能closeStream()是代碼,請幫助:Java無法訪問的代碼

import java.io.*; 
public class ThreadWrite extends Thread{ 
     private PrintWriter output; 
     private BufferedReader inputServer; 
     private final boolean test=true; 
     public ThreadWrite(PrintWriter out) { 
      output = out; 
      inputServer = new BufferedReader(new InputStreamReader(System.in)); 
     } 

     public void run(){ 
      String send; 
      while(test){ 
       System.out.print("Server:"); 
       try { 
        send = inputServer.readLine(); 
        output.println(send); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
      closeStream(); 
     } 

     public void closeStream() throws Exception{ 
      inputServer.close(); 
      output.close(); 
     } 


} 

需要你的幫助

+1

因爲您創建了無限循環。變量測試被分配爲true,並且在代碼中它無處變爲false(因爲您聲明它爲final,不能在btw中更改)。所以while循環之後的行將永遠不會執行。 – Sajmon

回答

2

while(test)總是返回true,所以下面的while循環(closeStream();)的聲明是不可達。

+0

謝謝,我忘了提供一個休息條件:D –

1

你永遠不會改變boolean testfalse,你不能(因爲其最終)因此,你永遠不會從while環遷出。

的Java

1

你宣佈testfinal,所以它的價值不能被改變,將繼續true

因此在while的條件下,只有true仍然存在,並且沒有辦法,雖然可以永遠結束(除了例外等)。因此之後while無法到達。

0

測試是一個真實的最終變量。你永遠不離開

while(test)

循環。

0

您在while loop之外提到了closeStream(),條件始終爲真,並且在您的while循環中沒有聲明會破壞它並達到closeStream()方法。