Is there a way to know if a Java program was started from the command line or from a jar file?

command-line, double-click, java, validation

Solution

The straight forward answer is that you cannot tell how the JVM was launched.

But for the example use-case in your question, you don't really need to know how the JVM was launched. What you really need to know is whether the user will see a message written to the console. And the way to do that would be something like this:

if (!file.exists()) {
    Console console = System.console();
    if (console != null) {
        console.format("File doesn't exists%n");
    } else if (!GraphicsEnvironment.isHeadless()) {
        JOptionPane.showMessage(null, "File doesn't exists");
    } else {
        // Put it in the log
    }
 }

The javadoc for Console, while not water tight, strongly hints that a Console object (if it exists) writes to a console and cannot be redirected.

Thanks @Stephen Denne for the `!GraphicsEnvironment.isHeadless()` tip.

Problem

I want to either display a message in the console or a pop up, so in case a parameter is not specified, I want to know to which should I display Something like: ``` if( !file.exists() ) { if( fromCommandLine()){ System.out.println("File doesn't exists"); }else if ( fromDoubleClickOnJar() ) { JOptionPane.showMessage(null, "File doesn't exists"); } } ```

Original source

Related problems