Я пытаюсь выполнить javac из Java, используя ProcessBuilder, но я не получаю вывод и ничего не происходит.Я попытался прочитать входной поток (так как есть ошибка, когда процесс зависает, если я его не читаю), но все равно безрезультатно.Первоначально я передал все необходимые параметры в javac, но он не работал, поэтому я упростил его до просто javac (который должен напечатать сообщение справки).
я попытался запустить "C: \ Windows \ System32 \ cmd.exe / c C: \\ "Program Files \" \ Java \ jdk1.6.0_23 \ bin \ 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 \ bin \ javac.exe": ошибка CreateProcess = 2, система не может найти указанный файл
, но если я скопирую команду и запусту ее из командной строки,работает нормально.
Мне известно об использовании класса JavaCompiler для компиляции моих файлов, но я бы предпочел сначала решить эту проблему, так как я не могу запустить ни одно приложение dos или файл .bat из Java.Я могу нормально запускать программы с графическим интерфейсом, например notepad.exe.
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",
};