从Java System.in发出读取输入

我正在尝试编写一个方法,提示用户在命令行上输入并从stdin读取其输入为String并返回。第一次调用它时,一切正常。 之后对getInput()的所有调用都不会返回任何内容。

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; /** * Prompts the user for input and reads from standard input (stdin). * Note: Always check if the return is null! * * @param description Describes the user input. * @return A String of the input, or null when failed. */ private String getInput(String description) { System.out.print(description + ": "); String input = null; InputStreamReader stream = null; BufferedReader reader = null; try { // Open a stream to stdin stream = new InputStreamReader(System.in); // Create a buffered reader to stdin reader = new BufferedReader(stream); // Try to read the string input = reader.readLine(); // Exhaust remainder of buffer while (reader.skip(1) > 0) { // Do nothing } } catch (IOException e) { e.printStackTrace(); // Error reading input } finally { // Clean up readers and streams try { if (reader != null) { reader.close(); } if (stream != null) { stream.close(); } } catch (IOException e) { } } System.out.print("\n"); return input; } /** * Display the login prompt. */ private boolean promptLogin() { // prompt for user name and password String user = getInput("Enter username"); String pass = getInput("Enter password"); if (user == null || pass == null) { System.out.println("Invalid login information."); return false; } // .. } 

您不得关闭标准输入流; 这就是它第一次运作的原因

 /** * Prompts the user for input and reads from standard input (stdin). * Note: Always check if the return is null! * * @param description Describes the user input. * @return A String of the input, or null when failed. */ private String getInput(String description) { System.out.print(description + ": "); String input = null; InputStreamReader stream = null; BufferedReader reader = null; try { // Open a stream to stdin stream = new InputStreamReader(System.in); // Create a buffered reader to stdin reader = new BufferedReader(stream); // Try to read the string input = reader.readLine(); } catch (IOException e) { e.printStackTrace(); } return input; } /** * Display the login prompt. */ private boolean promptLogin() { // prompt for user name and password String user = getInput("Enter username"); String pass = getInput("Enter password"); if (user == null || pass == null) { System.out.println("Invalid login information."); return false; } return true; }