2010-11-08 2 views

ответ

2

Может быть, вы ищете Java Runtime.exec() функции:

exec 
public Process exec(String command) 
       throws IOException 

Выполняет указанную команду строку в отдельном процессе. Это метод удобства . При вызове форма exec (команда) ведет себя в точно так же, как вызов exec (команда, null, null).

+1

может дать мне пример программы – user496789

0

с помощью ЦМД можно сделать так:

String cmd = "c:\\Programme\\Ghostgum\\gsview\\gsprint.exe"; //what to execute 
String prt = "-printer XYZ"; // additional parameters 
String dat = "\"" + pfad + "\""; // the file to be passed 
ProcessBuilder pb = new ProcessBuilder(cmd, prt, dat); 
System.out.println(cmd + " " + prt + " " + dat); 
pb.redirectErrorStream(true); 
Process ps = pb.start(); 
ps.waitFor(); 
+1

Примечание 1: не работает 'cmd.exe', переменная' shell' вообще не используется. 2: 'gsprint.exe' не является командой cmd. 3: нет причин называть 'redirectErrorStream', если вы не читаете стандартный вывод (в любом случае, не так). –

1

Для выполнения реальныхcmd команды, необходимые для запуска cmd.exe с опцией /c использованием Runtime.exec или ProcessBuilder как

String cmd = "dir > t.txt"; 
    ProcessBuilder builder = new ProcessBuilder("cmd.exe", "/c", cmd); 
    Process process = builder.start(); 
    process.waitFor(); 
    System.out.println("done"); 


Чтобы начать исполняемый файл, как calc.exe вы можете запустить его непосредственно

ProcessBuilder builder = new ProcessBuilder("calc.exe"); 
    Process process = builder.start(); 
    process.waitFor(); 
    System.out.println("done"); 

обоих образцов кода недостающих IO и обработки исключений ...

+0

Очень чистый и понятный ответ. – brimborium

1

Дополнительное примечание:

При использовании JDK1.6 теперь вы можете программно скомпилировать из другой java-программы, используя JavaCompiler. Вы можете вызвать свою программу компилятора из командной строки, если это то, чего вы пытаетесь достичь.

0

Я наконец получил свой ответ. Он фактически компилирует Java-программу. Программа выглядит следующим образом:

import java.io.BufferedReader; 
import java.io.InputStreamReader; 

public class Dos { 
    public static void main(String[] args) { 
     try { 
      String[] command = new String[4]; 
      command[0] = "cmd"; 
      command[1] = "/C"; 
      command[2] = "C:/Program Files/Java/jdk1.6.0_21/bin/javac";//path of the compiler 
      command[3] = "d:\\a.java"; 

      Process p = Runtime.getRuntime().exec(command); 

      BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream())); 

      BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream())); 

      // read the output from the command 

      String s = null; 
      System.out.println("Here is the standard output of the command:\n"); 
      while ((s = stdInput.readLine()) != null) { 
       System.out.println(s); 
      } 

      // read any errors from the attempted command 

      System.out.println("Here is the standard error of the command (if any):\n"); 
      while ((s = stdError.readLine()) != null) { 
       System.out.println(s); 
      } 
      System.out.println("I am In try"); 
     } 

     catch (Exception e) { 
      System.out.println("I am In catch"); 
     } 
    } 
} 
+0

Как компилятор, я бы отказался компилировать этот беспорядок. Пожалуйста, используйте правильное форматирование кода (желательно [Соглашения Java Code] (http://www.oracle.com/technetwork/java/javase/documentation/codeconvtoc-136057.html)). : D – brimborium

0

Не уверен, почему вы хотите явно вызвать оболочку для компиляции программ на Java. если вы абсолютно уверены, что это то, что вам нужно сделать, а затем пойти на это и следовать рекомендациям других. Однако, если все, что вы хотите сделать, это компиляция кода из программы Java, вы можете сделать это с Java 6.0 (и выше):

http://docs.oracle.com/javase/6/docs/api/javax/tools/JavaCompiler.html