2016-11-30 90 views
-2

我試過兩個版本,但都反覆打印出程序的其他部分。BufferedReader不會阻止輸入

版本1(帶有換行符)

try(BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) { 
    while(true) { 
     String input = br.readLine(); 
     if(input != null) { 
      SomeRequest req = new SomeRequest(); 
      req.text = input; 
      client.sendTCP(req); 
     } else { 
      System.out.println("non stop..."); <-- this continously prints 
     } 
    } 
} 

第2版(無新線)

try(BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) { 
    while(true) { 
     String input = br.readLine(); 
     if(input != null) { 
      SomeRequest req = new SomeRequest(); 
      req.text = input; 
      client.sendTCP(req); 
     } else { 
      System.out.print("non stop..."); <-- this continously prints as well? 
     } 
    } 
} 

版本3(拋出異常)

try(Scanner sc = new Scanner(System.in)) { 
    String input = ""; 
    System.out.println("Enter to send"); 
    while(true) { 
     if(!sc.hasNextLine()) { 
      input = sc.nextLine(); 
      SomeRequest req = new SomeRequest(); 
      req.text = input; 
      client.sendTCP(req); 
     } else { 
      System.out.println("not sending"); 
     } 
    } 
} 

我試着讓用戶可以在控制檯上打印一些內容,將其發送到服務器。但現在該程序只是打印不停止...

+1

爲什麼即使打擾使用BufferedReader? –

+0

爲什麼你期望print和println的行爲有所不同?我認爲你的代碼只有一個版本就足夠了,因爲它們在你的問題的背景下幾乎相同。 –

+1

[for循環在Java中運行3次後可能會重複下一次輸入](http://stackoverflow.com/questions/23720118/for-loop-in-java-runs-3-times-before-taking-next-輸入) –

回答

1

這兩個版本都是無效的。您不在流結束時退出循環。它應該是:

try(BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) { 
    String input; 
    while ((input = br.readLine()) != null) { 
     SomeRequest req = new SomeRequest(); 
     req.text = input; 
     client.sendTCP(req); 
     } 
    } 
    System.out.print("End of input"); 
}