Я попробовал это, и теперь я не получаю сообщение об ошибке, но все еще нет вывода из javac на стандартные потоки ввода или ошибок. Когда я предоставляю параметры classpath, он также не генерирует скомпилированные файлы.
аюсь выполнить 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: \" Program Files "\ 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",
};