2015-12-01 4 views
0

Я хочу создать приложение, которое может компилировать и запускать внешние программы. Для этого мне нужно запустить команды компилятора из командной строки (такие команды, как javac и gcc). Я попробовал этот подход дал здесь - Run cmd commands through javaКак вызвать команды cmd из программы Java в Windows?

Это мой код

import java.io.*; 

public class Main 
{ 
    public static void main(String[] args) throws Exception 
    { 
     ProcessBuilder builder=new ProcessBuilder(
       "cmd.exe","javac F://Test.java","java -cp F:// Test"); 
     builder.redirectErrorStream(true); 
     builder.start(); 
     Process p = builder.start(); 
     BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream())); 
     String line; 
     try 
     { 
      while (true) 
      { 
       line = r.readLine(); 
       if (line != null) 
       System.out.println(line); 
      } 
     } 
     catch(Exception e){} 
    } 
} 

Но когда я запускаю его, он просто выполняет 1-й команды (cmd.exe), отображает этот выход:

Microsoft Windows [версия 6.3.9600] (c) Корпорация Microsoft в 2013 году. Все права защищены.

И затем он ждет бесконечно. Что я здесь делаю неправильно?

EDIT- Мой вопрос был идентифицирован как дубликат этого вопроса - Start CMD by using ProcessBuilder. Но я считаю, что этот вопрос задает вопрос о том, как запустить cmd из java-кода. Мне нужна моя программа для выполнения команд cmd. Например. Я хочу выполнить команду javac после запуска процесса для cmd.

+1

'cmd/c ...' для выполнения других приложений ... –

+1

Возможный дубликат [Начать CMD с помощью ProcessBuilder] (http://stackoverflow.com/questions/10954194/start-cmd-by-using- ProcessBuilder) – JFPicard

ответ

0
Process p = Runtime.getRuntime().exec("gcc ..."); 

https://docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html#exec(java.lang.String)

Вы также должны прочитать этот пост:

Want to invoke a linux shell command from Java

Большинство из них не Linux специфичны. Он содержит полезную информацию о том, как обрабатывать стандартную ошибку или перенаправление потока (что также возможно в оболочке Windows).

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