Search code examples
javaconsole-applicationexecutable-jar

How do I make my java application open a console/terminal window?


Is there any way I can make an executable .jar that will open up the command line when double clicked?

I'm making a text-based adventure game. As of right now it is just a maze with rooms. Eventually it is going to be much bigger and more in depth but for now I just want to get the basic structure down. Anyways, to make this work I've been getting output and input from the System.out.printf command and the java.util.Scanner. It's all working beautifully so far but I've realized I'm going to run into a problem when I try to send this to other people that don't know how or just don't want to run the program from the command line.


Solution

  • I found this while looking for an answer myself, I ended up writing this bit:

    /**
     * This opens a command line and runs some other class in the jar
     * @author Brandon Barajas
     */
    import java.io.*;
    import java.awt.GraphicsEnvironment;
    import java.net.URISyntaxException;
    public class Main{
        public static void main (String [] args) throws IOException, InterruptedException, URISyntaxException{
            Console console = System.console();
            if(console == null && !GraphicsEnvironment.isHeadless()){
                String filename = Main.class.getProtectionDomain().getCodeSource().getLocation().toString().substring(6);
                Runtime.getRuntime().exec(new String[]{"cmd","/c","start","cmd","/k","java -jar \"" + filename + "\""});
            }else{
                THEMAINCLASSNAMEGOESHERE.main(new String[0]);
                System.out.println("Program has ended, please type 'exit' to close the console");
            }
        }
    }
    

    not sure if my answer is still relevant, but feel free to use it with the comment kept in o/

    Only flaw I can think of is that it leaves the cmd window open after the program completes.

    Usage: place this class in the same package as your main class and set it as the main class, it will open a command prompt window if one is not open, or if one is open launch the main class. Name / location of jar file is automatic. Designed for windows, but if you want it for another system just message me and I'll fix it. (I could do OS detection but I'm lazy and just making this so I can turn in a double-click jar file to my professor who uses windows).