我试图使用ProcessBuilder从Java执行javac,但是我没有输出,也没有任何反应。我尝试阅读输入流(因为如果我没有阅读它,有一个进程挂起的错误),但仍然没有结果。我最初将所有必需的参数传递给了javac,但它不起作用,所以我简化为javac(它应该打印帮助信息)。无法在Windows下使用ProcessBuilder在Java中执行javac或其他命令行应用程序7
我试图运行 “C:\ WINDOWS \ SYSTEM32 \ CMD.EXE/C C:\\” 程序文件\ “\的Java \ jdk1.6.0_23 \斌\的javac.exe” “C:\\ “Program Files \”\ Java \ jdk1.6.0_23 \ bin \ javac.exe“ ”,并用双引号将javac的整个路径包围起来,但仍然没有任何内容。
我得到的错误
不能运行程序 “C:\ WINDOWS \ SYSTEM32 \ CMD.EXE/C C:\” 程序文件 “\的Java \ jdk1.6.0_23 \斌\的javac.exe”: CreateProcess错误= 2,系统找不到指定的文件
但如果我复制命令并从命令行运行它工作正常。
我知道使用JavaCompiler类来编译我的文件,但我宁愿先解决这个问题,因为我不能从Java运行任何dos应用程序或.bat文件。我可以像notepad.exe那样运行GUI程序,尽管如此。
String[] commands = new String[]{
"C:\\Windows\\System32\\cmd.exe /c C:\\\"Program Files\"\\Java\\jdk1.6.0_23\\bin\\javac.exe"
};
logger.log(Level.INFO, "About to run javac with the command below:");
String commandToOutput = "";
for (String command : commands) {
commandToOutput += command + " ";
}
logger.log(Level.INFO, commandToOutput);
ProcessBuilder processBuilder = new ProcessBuilder(commands);
Process p = processBuilder.start();
编辑2
String[] commands = new String[]{
"C:\\\"Program Files\"\\Java\\jdk1.6.0_23\\bin\\javac.exe", "-d", "\"" + tempDir + "\"", "-classpath", classpath
};
编辑3
为什么它的是,第二命令阵列工作,但先不下方。
//this gives me CreateProcess error=5, Access is denied
commands = new String[]{
"C:\\\"Program Files\"\\Java\\jdk1.6.0_23\\bin\\javac.exe"
};
//this works
commands = new String[]{
"C:\\Windows\\System32\\cmd.exe",
"/c",
"C:\\\"Program Files\"\\Java\\jdk1.6.0_23\\bin\\javac.exe",
};
有点晚了,但我不认为这个`C:\“Program Files”\ Java \ ...`路径看起来是正确的。要么把报价放在完整的道路上,要么放弃。 – 2011-06-02 15:23:48