Make the console wait for a user input to close

JavaConsole Application

Java Problem Overview


I have a console application that after performing its tasks, must give feedback to the user, such as "operation completed" or "operation failed" and the detailed error.

The thing is, if I just "let it run", the output message will be printed but the console will close shortly afterwards, leaving no time to read the message.

As far as I remember, in C++, every console application will end with a "press any key to exit" or something like that. In C# I can simulate this behavior with a

Console.ReadKey();

But how can I do it in Java? I'm using the Scanner class, but given that "input" is my instance of Scanner:

input.next()
System.exit(0);

"Any key" will work, except for return, which is quite a big deal here. Any pointers?

Java Solutions


Solution 1 - Java

In Java this would be System.in.read()

Solution 2 - Java

I'd like to add that usually you'll want the program to wait only if it's connected to a console. Otherwise (like if it's a part of a pipeline) there is no point printing a message or waiting. For that you could use Java's Console like this:

import java.io.Console;
// ...
public static void waitForEnter(String message, Object... args) {
    Console c = System.console();
    if (c != null) {
        // printf-like arguments
        if (message != null)
            c.format(message, args);
        c.format("\nPress ENTER to proceed.\n");
        c.readLine();
    }
}

Solution 3 - Java

The problem with Java console input is that it's buffered input, and requires an enter key to continue.

There are these two discussions: https://stackoverflow.com/q/572001/84378 and https://stackoverflow.com/q/414237/84378

The latter of which used JLine to get his problem solved.

I personally haven't used it.

Solution 4 - Java

You can just use nextLine(); as pause

import java.util.Scanner
//
//
Scanner scan = new Scanner(System.in);

void Read()
{
     System.out.print("Press any key to continue . . . ");
     scan.nextLine();
}

However any button you press except Enter means you will have to press Enter after that but I found it better than scan.next();

Solution 5 - Java

public static void main(String args[])
{
    Scanner s = new Scanner(System.in);
    
    System.out.println("Press enter to continue.....");
    
    s.nextLine();   
}

This nextline is a pretty good option as it will help us run next line whenever the enter key is pressed.

Solution 6 - Java

I used simple hack, asking windows to use cmd commands , and send it to null.

// Class for Different hacks for better CMD Display
import java.io.IOException;
public class CMDWindowEffets
{
    public static void getch() throws IOException, InterruptedException
    {
        new ProcessBuilder("cmd", "/c", "pause > null").inheritIO().start().waitFor();
    }    
}

Solution 7 - Java

I've put in what x4u said. Eclipse wanted a try catch block around it so I let it generate it for me.

try {
		System.in.read();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}

It can probably have all sorts of bells and whistles on it but I think for beginners that want a command line window not quitting this should be fine.

Also I don't know how common this is (this is my first time making jar files), but it wouldn't run by itself, only via a bat file.

java.exe -jar mylibrary.jar

The above is what the bat file had in the same folder. Seems to be an install issue.

Eclipse tutorial came from: http://eclipsetutorial.sourceforge.net/index.html

Some of the answer also came from: Oracle Thread

Solution 8 - Java

A simple trick:

import java.util.Scanner;  

/* Add these codes at the end of your method ...*/

Scanner input = new Scanner(System.in);
System.out.print("Press Enter to quit...");
input.nextLine();

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionmakoshichiView Question on Stackoverflow
Solution 1 - Javax4uView Answer on Stackoverflow
Solution 2 - JavaPetrView Answer on Stackoverflow
Solution 3 - JavaReverend GonzoView Answer on Stackoverflow
Solution 4 - JavaMohammadAmin98View Answer on Stackoverflow
Solution 5 - JavaPranjal GuptaView Answer on Stackoverflow
Solution 6 - JavaAnton KasiynView Answer on Stackoverflow
Solution 7 - Javadim_volyView Answer on Stackoverflow
Solution 8 - JavaS.H.KashaniView Answer on Stackoverflow