Класс выполнения в Java - PullRequest
       12

Класс выполнения в Java

3 голосов
/ 03 февраля 2009

Как выполнить Java-программу с помощью Runtime.getRuntime (). Exec (). Например, у нас будет путь к файлу java как c: /java/abc.java. Пожалуйста, помогите мне с кодом.

Ответы [ 6 ]

2 голосов
/ 03 февраля 2009

Вы должны использовать ProcessBuilder вместо времени выполнения. Основное использование как:

Process process = new ProcessBuilder(command).start();

Вы найдете больше кода по ссылке выше. Также см. этот вопрос .

2 голосов
/ 03 февраля 2009

Не забывайте, что:

  • вам может понадобиться прочитать stdout / stderr java-программы
  • вам может потребоваться установить / обновить переменную окружения и PATH перед выполнением команды Java

    CreateProcess: c: \ j2sdk1.4.0 \ bin \ helloworld error = 2

означает, что Win32 CreateProcess возвращает 2 как код ошибки, когда не может найти указанную вами команду; более конкретно, когда команда не ссылается на исполняемый файл в пути поиска.

Посмотрите на этот SO вопрос , чтобы получить более полный код "Runtime.getRuntime().exec()", а также этот фрагмент .

Этот код создает оболочку (как в Runtime.getRuntime().exec("cmd /K")), в которой вы пишете sdtin любую команду, которую хотите выполнить.

Интерес этого подхода состоит в том, чтобы повторно использовать процесс оболочки, чтобы извлечь выгоду из предыдущей команды: если вы выполните 'cd', а затем выполните 'dir', последняя команда отобразит содержимое каталога на который ссылается команда cd.

То же самое будет верно для PATH настроек, непосредственно перед использованием javac или java.

2 голосов
/ 03 февраля 2009

Предполагая, что abc.java содержит метод main, который вы хотите выполнить:

Runtime.getRuntime().exec("javac c:\java\abc.java -d c:\java\")
Runtime.getRuntime().exec("java c:\java\abc")
1 голос
/ 03 июня 2012
String path1 = "f://" + File.separator+username+File.separator+progName; 
Runtime runtime = Runtime.getRuntime();
String command = "javac -classpath " + path + " " + path1;
System.out.println(command);
Process process = runtime.exec(command);
InputStream error = process.getErrorStream();
1 голос
/ 03 февраля 2009

Вы имеете в виду, что вы хотите, чтобы Java-программа запускала другую Java-программу. Этот поток SO может быть полезен, в этом случае.

0 голосов
/ 03 февраля 2009

Пожалуйста, посмотрите отличный ресурс, который раньше назывался javaalmanac.

http://www.exampledepot.com/egs/java.lang/Exec.html

try {
    // Execute a command with an argument that contains a space
    String[] commands = new String[]{"grep", "hello world", "/tmp/f.txt"};
    commands = new String[]{"grep", "hello world", "c:\\Documents and Settings\\f.txt"};
    Process child = Runtime.getRuntime().exec(commands);
 } catch (IOException e) {
 }
...