4

I have seen several topics about this but i havent got i to work. All i am trying to do is open cmd.exe from a java program.

notepad.exe opens fine.

The problem is that cmd.exe dosent open, the code compiles fine with no error

here is my code:

public class CMD {

public static void main(String[] args) {

  //Trying some variants how to start. 

  //String cmd = "C:\\WINDOWS\\system32\\cmd.exe";
  //String[] cmd = {"C:\\WINDOWS\\system32\\cmd.exe","start"};

  String[] cmd = {"C:\\WINDOWS\\system32\\cmd.exe","/c","start"};

   // notepad works fine
   //String notepad = "C:\\WINDOWS\\system32\\notepad.exe";


 try {        
    Runtime runtime = Runtime.getRuntime();
    //Process p = runtime.exec(notepad);
    Process p = runtime.exec(cmd);


 }

catch (java.io.IOException exception) {
    System.out.println("Caught IOException: " + exception.getMessage());

    }
}
}
Daniel
  • 98
  • 2
  • 2
  • 6

3 Answers3

7

try this..

public static void main(String args[]) {
    try {
        Runtime.getRuntime().exec("cmd.exe /c start");
        System.out.println("ok");
    } catch (IOException ex) {
        ex.printStackTrace();
    }
}
subash
  • 3,116
  • 3
  • 18
  • 22
  • The questioner’s code will work too. So as long as there’s no problem description there will be no knowledge about the solution. This code here might show the same problem on the questioner’s machine, we simply don’t know. – Holger Nov 21 '13 at 12:36
  • OK is printed but cmd.exe doesnt start or dosent get displayed – Daniel Nov 21 '13 at 12:55
  • are you can open **cmd** in run **Window key + R** – subash Nov 21 '13 at 12:59
2

As suggested by many here on SO, Runtime.getRuntime().exec(..) might give troubles. Instead use ProcessBuilder API.

I used the following:

public static void run(String argument) throws IOException {
        List<String> command = new ArrayList<String>();
        OsCheck.OSType osType = OsCheck.getOperatingSystemType();
        System.out.println("OS: " + osType);
        String shell;
        if(osType.toString().equals("Windows")) {
            command.add("cmd.exe");
            command.add("/c");
        } else {
            shell = "/bin/bash";
            command.add(shell);
        }
        command.add(argument);
        InputStream inputStream = null;
        InputStream errorStream = null;
        try {
            ProcessBuilder processBuilder = new ProcessBuilder(command);
            Process process = processBuilder.start();

            inputStream = process.getInputStream();
            errorStream = process.getErrorStream();

            System.out.println("Process InputStream: " + IOUtils.toString(inputStream, "utf-8"));
            System.out.println("Process ErrorStream: " + IOUtils.toString(errorStream, "utf-8"));
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (inputStream != null) {
                inputStream .close();
            }
            if (errorStream != null) {
                errorStream.close();
            }
        }
    }

Utility:

public final class OsCheck {
    /**
     * Enum type which contains OS names.
     */
    private static OSType detectedOS;

    /**
     * <p>
     * Finds the OS
     * </p>
     *
     * @return One of the values of the enum OSType
     */
    public static OSType getOperatingSystemType() {
        if (detectedOS == null) {
            String OS = System.getProperty("os.name", "generic").toLowerCase();
            if (OS.contains("win")) {
                detectedOS = OSType.Windows;
            } else if ((OS.contains("mac")) || (OS.contains("darwin"))) {
                detectedOS = OSType.MacOS;
            } else {
                detectedOS = OSType.Linux;
            }
        }
        return detectedOS;
    }

    /**
     * Represents the popular os types i.e Windows, or MacOS or Linux
     */
    public enum OSType {
        Windows, MacOS, Linux
    }
}
phoenix
  • 985
  • 3
  • 17
  • 38
1

To open cmd using java only two line codes are required.

Runtime runtime = Runtime.getRuntime();
Process p = runtime.exec("cmd.exe /c start");

--------------> example <------------

    public class Cmd {

        public static void main(String[] args) {
            try {

                //Create the Process Instance, You don’t need to Import anything for this.

                Process p;

                //To Execute the Process containg the Command as the Parameter

                p = Runtime.getRuntime().exec("cmd /c start cmd");

                //As the same way you can use all the commands to Execute your favorite apps.

            } catch (Exception e) {
            }
        }
    }
ArtKorchagin
  • 4,801
  • 13
  • 42
  • 58
Sushin Pv
  • 11
  • 1