Как ответил javaBeginner, я хотел бы поделиться еще кое-чем по этой теме.
Вы не упомянули, какая команда вы пытаетесь запустить и ошибка? Надеюсь, это поможет вам.
На это есть несколько причин.
Функции класса java.lang.Runtime статический метод с именем getRuntime()
, который извлекает текущую среду выполнения Java.
Существует четыре перегруженных версии команды exec():
- публичный процесс exec (строковая команда);
- публичный процесс exec(String [] cmdArray);
- public Process exec (команда String, String [] envp);
- публичный процесс exec(String [] cmdArray, String [] envp);
Для каждого из этих методов команда и, возможно, набор аргументов передаются вызову функции, специфичной для операционной системы. Впоследствии это создает процесс, специфичный для операционной системы (работающую программу), со ссылкой на класс Process, возвращаемый виртуальной машине Java. Класс Process является абстрактным классом, поскольку для каждой операционной системы существует определенный подкласс Process.
В эти методы можно передать три возможных входных параметра:
- Одна строка, представляющая как программу для выполнения, так и любые аргументы этой программы.
- Массив строк, отделяющих программу от ее аргументов.
- Массив переменных среды
Первая ловушка, связанная с Runtime.exec()
, — это IllegalThreadStateException
.
Чаще всего первым тестом API является кодирование наиболее очевидных методов. Например, чтобы выполнить процесс, внешний по отношению к виртуальной машине Java, мы используем метод exec()
. Чтобы увидеть значение, которое возвращает внешний процесс, мы используем метод exitValue()
в Process
класс. В нашем первом примере мы попытаемся запустить компилятор Java (javac.exe):
import java.util.*;
import java.io.*;
public class BadExecJavac
{
public static void main(String args[])
{
try
{
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("javac");
int exitVal = proc.exitValue();
System.out.println("Process exitValue: " + exitVal);
} catch (Throwable t)
{
t.printStackTrace();
}
}
}
Запуск BadExecJavac производит:
D:\progs>java BadExecJavac
java.lang.IllegalThreadStateException: process has not exited
at java.lang.Win32Process.exitValue(Native Method)
at BadExecJavac.main(BadExecJavac.java:13)
Если внешний процесс еще не завершен, метод exitValue()
выдаст ошибку IllegalThreadStateException
; вот почему эта программа потерпела неудачу.
Это лучшая ссылка который я использовал. Посмотреть все четыре страницы.
Помните, что в JSP веб-приложения сервлет запускается на стороне сервера, а не на стороне клиента, и Runtime.exec()
выполняет команды в той же среде, в которой выполняется команда. Он будет работать только на сервере, а не на клиенте
Некоторые ссылки
- Если вы используете код в
JSP
, как указано в этом сообщении
- Проблема Runtime.exec с Tomcat при запуске в качестве службы Windows
person
Aniket Kulkarni
schedule
07.10.2013