I\'m trying to execute javac from Java using ProcessBuilder but i get no output and nothing happens. I tried reading the input stream (as there is a bug where the process hangs
You have to read from process.getInputStream()
yourself. As far as I know, processes' output doesn't automatically show on stdout.
You're using the wrong method of process builder. Use the single string version, i.e. don't pass a string array, just pass a string. The string array version is for when you've already already divided up the command into the program, its options, and its the arguments. As it stands now, its looking for a program executable file called C:\\Windows\\System32\\cmd.exe /c C:\\\"Program Files\"\\Java\\jdk1.6.0_23\\bin\\javac.exe
.
Alternatively, split your command into the program and arguments in the string array and then you can use the String array version of process builder.
String[] = new String[] {
"C:\\Windows\\System32\\cmd.exe",
"/c",
"C:\\\"Program Files\"\\Java\\jdk1.6.0_23\\bin\\javac.exe"
}
And
The string array that you pass to ProcessBuilder should contain one argument per array element, not everything in a single big string.
Try this:
String[] commands = new String[] { "C:\\Windows\\System32\\cmd.exe", "/c", "C:\\\"Program Files\"\\Java\\jdk1.6.0_23\\bin\\javac.exe" };
Btw: there is no need to call cmd.exe, you can pass javac.exe directly to the ProcessBuilder
ProcessBuilder builder = new ProcessBuilder( "C:\\\"Program Files\"\\Java\\jdk1.6.0_23\\bin\\javac.exe", "\\Path\\To\\MyClass.java" );