Я попробовал это, и теперь я не получаю сообщение об ошибке, но все еще нет вывода из 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",
              };

Ответы на вопрос(3)

Ваш ответ на вопрос