There is no need for you to check for available input waiting and sleeping until there is since Scanner.nextLine()
will block until a line is available.
Have a look at this example I wrote to demonstrate it:
public class ScannerTest { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); try { while (true) { System.out.println("Please input a line"); long then = System.currentTimeMillis(); String line = scanner.nextLine(); long now = System.currentTimeMillis(); System.out.printf("Waited %.3fs for user input%n", (now - then) / 1000d); System.out.printf("User input was: %s%n", line); } } catch(IllegalStateException | NoSuchElementException e) { // System.in has been closed System.out.println("System.in was closed; exiting"); } } }
Please input a line
hello
Waited 1.892s for user input
User input was: hello
Please input a line
^D
System.in was closed; exiting
So all you have to do is to use Scanner.nextLine()
and your app will wait until the user has entered a newline. You also don’t want to define your Scanner inside the loop and close it since you’re going to use it again in the next iteration:
Scanner userInput = new Scanner(System.in); while(true) { System.out.println("Ready for a new command sir."); String input = userInput.nextLine(); System.out.println("input is '" + input + "'"); if (!input.isEmpty()) { // Handle input } } }