2012-06-10 3 views
0

Я пытаюсь использовать java для запуска пакетного файла в абсолютном местоположении. Пакетный файл скомпилирует пару java-файлов.Runtime.exec ничего не делает ... (без ошибок)

Вот код, который я пытался:

String s=file.getAbsolutePath() + "\\compile.bat"; 
Runtime rut = Runtime.getRuntime(); 
try { 
    rut.exec(new String[] {file.getAbsolutePath() + "\\compile.bat"}); 
}catch(IOException e1) { 
    e1.printStackTrace(); 
} 
System.out.println(s); 

Теперь, когда этот код запускается на выполнение, я не получаю ошибки консоли, но пакетный файл не запускается. Однако, когда я запускаю командный файл через проводник Windows, пакетный файл работает, компилирует файлы и закрывается, когда это делается.

ответ

2

Откуда вы знаете, что ошибок консоли не было?

Попробуйте это:

String s=file.getAbsolutePath() + "\\compile.bat"; 
Runtime rut = Runtime.getRuntime(); 
try { 
    Process process = rut.exec(new String[] {file.getAbsolutePath() + "\\compile.bat"}); 
    // prints out any message that are usually displayed in the console 
    Scanner scanner = new Scanner(process.getInputStream()); 
    while (scanner.hasNext()) { 
     System.out.println(scanner.nextLine()); 
    } 
}catch(IOException e1) { 
    e1.printStackTrace(); 
} 
System.out.println(s); 
+0

Хорошо, исправил. Благодаря! –

+0

@Jeff: Не забудьте взять и прочитать поток ошибок, как рекомендовано в полезном (но удаленном) ответе принца Джона Уэсли. –

+0

@PrinceJohnWesley: проголосовали за удаление вашего ответа. –

0

Обратите внимание, что при использовании вызова из Runtime.exec, то рабочего каталога команды выполняется будет текущих рабочим каталогом процесса Java. Нужен ли ваш командный файл в конкретном каталоге?

Если вам нужно установить определенный рабочий каталог для подпроцесса, вам потребуется использовать другую версию Runtime.exec.

+0

Да, пакетный файл находится в папке файлов вместе со всеми Java-файлы, которые должны быть собраны, так что файлы, на которые ссылается _javac_ являются относительно места расположения пакетного файла. –

+0

Похоже, вам нужно указать рабочий каталог. Просто указывая абсолютный путь для _command, который будет выполнен_ **, не устанавливает ** рабочий каталог для команды. – pb2q

1

Проверьте возвращаемое значение подпроцесса с помощью exitValue(). Также прочитайте поток ошибок getErrorStream(), если существующее значение не равно нулю.

+0

почему downvote ??? –

Смежные вопросы