2013-10-07 4 views
0

Runtime.exec() не работает на tomcat.java runtime.exec() не работает на tomcat

У меня возникла проблема с запуском команды из Java-приложения. Я использовал runtime.exec(). Он отлично работает при затмении. Но не работает вообще после развертывания на tomcat. Я думаю, что runtime.exec() не работает вообще. Есть идеи?

Я написал на стороне сервера. Я хочу создать задачу расписания Windows из среды выполнения. Вот мой код.

String l_Time = pData.getTimeStamp(); 
ProcessBuilder builder = new ProcessBuilder("cmd", "/c", "start SchTasks /Create " + 
       "/SC WEEKLY /D MON,TUE,WED,THU,FRI,SAT,SUN /TN \"TaskName\"" + 
       " /TR \"D:/Test/Test.bat\" /ST 09:00\""); 
builder.redirectErrorStream(true); 
Process p = builder.start(); 

BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream())); 
String line; 
while (true) { 
    line = r.readLine(); 
    if (line == null) { break; } 
     System.out.println(line); 
} 
p.waitFor(); 
int exitVal = p.exitValue(); 
System.out.println("Process exitValue: " + exitVal); 
+0

ли вы пытаетесь выполнить что-то на сервере, где живет Tomcat? или на клиенте, где живет браузер (это не сработает)? – Thilo

+0

На сервере tomcat. –

ответ

2

, если вы пытаетесь выполнить в Runtime.exec(), то он не будет работать в стороне клиента

+0

Я использовал на стороне сервера. –

0

Как javaBeginner ответил, я хотел бы поделиться некоторыми больше по этой теме.
Вы не указали, какая команда вы пытаетесь запустить и ошибка? Я надеюсь, это поможет вам.
Существует несколько причин.

Класс java.lang.Runtime имеет статический метод, называемый getRuntime(), который извлекает текущую среду выполнения Java.
Есть четыре перегруженных версии Exec() команду:

  1. общественного процесса Exec (командная строка);
  2. public process exec (String [] cmdArray);
  3. public process exec (команда String, String [] envp);
  4. public process exec (String [] cmdArray, String [] envp);

Для каждого из этих методов команда - и, возможно, набор аргументов - передается вызову функции, зависящей от операционной системы. Это впоследствии создает процесс, зависящий от операционной системы (запущенная программа) со ссылкой на класс Process, возвращаемый Java VM. Класс Process является абстрактным классом, поскольку для каждой операционной системы существует отдельный подкласс процесса.

Вы можете пройти три возможных входных параметров в этих методов:

  1. Единственная строка, которая представляет собой как программу для выполнения и любые аргументы в этой программе
  2. Массив строк, разделяющие программу из ее аргументы
  3. массива переменных окружения

Первая ловушка, относящаяся к 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() выполняет команды в той же среде, где выполнена команда. Он будет работать только на сервере, а не на клиенте

Некоторые ссылки

  1. Если вы работаете код в JSP, как, как упоминалось об этом post
  2. Runtime.exec problem with Tomcat when started as Window Service
+0

Вот мой код –

+0

@HlaingMyo: у вас есть typo 'String l_Time = = pData.getTimeStamp();' type 'String l_Time = pData.getTimeStamp();'. –

Смежные вопросы