Класс времени выполнения в java

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


person Arun    schedule 03.02.2009    source источник


Ответы (5)


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

Runtime.getRuntime().exec("javac c:\java\abc.java -d c:\java\")
Runtime.getRuntime().exec("java c:\java\abc")
person Chris Bunch    schedule 03.02.2009
comment
CreateProcess: c:\j2sdk1.4.0\bin\helloworld error=2 Это сообщение об исключении во время выполнения - person Arun; 03.02.2009
comment
Это действительно не дает многого, чтобы уйти. Можете ли вы отредактировать свой вопрос, включив в него простой файл helloworld и всю трассировку стека? - person Chris Bunch; 03.02.2009

Не забывай это:

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

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

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

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

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

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

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

person VonC    schedule 03.02.2009

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

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

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

person Fabian Steeg    schedule 03.02.2009

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

person Adeel Ansari    schedule 03.02.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) {
 }
person Thorbjørn Ravn Andersen    schedule 03.02.2009