Home > DeveloperSection > Forums > Get java to wait for user input
Barbara Jones

Total Post:13

Points:91
Posted on    May-19-2015 3:23 AM

 Java Java 
Ratings:


 1 Reply(s)
 506  View(s)
Rate this:

I’m attempt to make the main loop wait for the user to input something I added the loop:

while(!userInput.hasNext());

this is not work correctly. I have heard BufferedReader but I have never used it. So please solve my problem.

while(true) {

        System.out.println("Ready for a new command sir.");

        Scanner userInput = new Scanner(System.in);

 

        while(!userInput.hasNext());

 

        String input = "";

        if (userInput.hasNext()) input = userInput.nextLine();

 

        System.out.println("input is '" + input + "'");

 

        if (!input.equals("")) {

            //main code

        }

        userInput.close();

        Thread.sleep(1000);

    }



Lillian Martin

Total Post:27

Points:189
Posted on    May-19-2015 3:41 AM

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

        }

    }

    }


Don't want to miss updates? Please click the below button!

Follow MindStick