Как javaBeginner ответил, я хотел бы поделиться некоторыми больше по этой теме.
Вы не указали, какая команда вы пытаетесь запустить и ошибка? Я надеюсь, это поможет вам.
Существует несколько причин.
Класс java.lang.Runtime имеет статический метод, называемый getRuntime()
, который извлекает текущую среду выполнения Java.
Есть четыре перегруженных версии Exec() команду:
- общественного процесса Exec (командная строка);
- public process exec (String [] cmdArray);
- public process exec (команда String, String [] envp);
- public process exec (String [] cmdArray, String [] envp);
Для каждого из этих методов команда - и, возможно, набор аргументов - передается вызову функции, зависящей от операционной системы. Это впоследствии создает процесс, зависящий от операционной системы (запущенная программа) со ссылкой на класс Process, возвращаемый Java VM. Класс Process является абстрактным классом, поскольку для каждой операционной системы существует отдельный подкласс процесса.
Вы можете пройти три возможных входных параметров в этих методов:
- Единственная строка, которая представляет собой как программу для выполнения и любые аргументы в этой программе
- Массив строк, разделяющие программу из ее аргументы
- массива переменных окружения
Первая ловушка, относящаяся к Runtime.exec()
является IllegalThreadStateException
.
Преобладающим первым испытанием API является кодирование его наиболее очевидных методов. Например, чтобы выполнить процесс, который является внешним по отношению к виртуальной машине Java, мы используем метод exec()
. Чтобы увидеть значение, возвращаемое внешним процессом, мы используем метод exitValue()
на Process
class. В нашем первом примере мы попытаемся выполнить компилятор 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
; поэтому эта программа не удалась.
Это фото из этой страны link which I used. Смотрите все четыре страницы.
Помните, что в веб-приложении JSP сервлет работает на стороне сервера, а не на клиенте, а Runtime.exec()
выполняет команды в той же среде, где выполнена команда. Он будет работать только на сервере, а не на клиенте
Некоторые ссылки
- Если вы работаете код в
JSP
, как, как упоминалось об этом post
- Runtime.exec problem with Tomcat when started as Window Service
ли вы пытаетесь выполнить что-то на сервере, где живет Tomcat? или на клиенте, где живет браузер (это не сработает)? – Thilo
На сервере tomcat. –