2010-04-09 3 views
2

У меня есть класс со следующим кодом:
Java Runtime командной строки Процесс

Process process = null; 
try { 
    process = Runtime.getRuntime().exec("gs -version"); 
    System.out.println(process.toString()); 
} catch (Exception e1) { 
    e1.printStackTrace(); 
} finally { 
    process.destroy(); 
} 

Я могу запустить «гс -версия» на моей командной строки и получить: GPL Ghostscript 8.71 (2010-02-10) Copyright (C) 2010 Artifex Software, Inc. Все права защищены.

Итак, я знаю, что у меня есть путь, по крайней мере, где-то установленный.

Я могу запустить этот класс из командной строки, и он работает. Но когда я запускаю его с помощью затмение я получаю следующее сообщение об ошибке:

java.io.IOException: Cannot run program "gs": error=2, No such file or directory 
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:459) 
    at java.lang.Runtime.exec(Runtime.java:593) 
    at java.lang.Runtime.exec(Runtime.java:431) 
    at java.lang.Runtime.exec(Runtime.java:328) 
    at clris.batchdownloader.TestJDBC.main(TestJDBC.java:17) 
Caused by: java.io.IOException: error=2, No such file or directory 
    at java.lang.UNIXProcess.forkAndExec(Native Method) 
    at java.lang.UNIXProcess.<init>(UNIXProcess.java:53) 
    at java.lang.ProcessImpl.start(ProcessImpl.java:91) 
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:452) 
    ... 4 more 

В моей программе, я могу заменить «GS» с: «Java», «МВН», «СВН», и это работает. Но «gs» этого не делает. Только в затмении у меня есть эта проблема.

Любые идеи, что мне нужно сделать для решения этой проблемы?

ответ

3

Я думаю, вам нужно установить PATH как переменную окружения в вашей конфигурации Eclipse Run.

+0

Итак, я попытался добавить путь к «gs» в «Закладки конфигурации» -> «Вкладка« Среда »и« Связанные ресурсы »(« Настройки -> Общие -> Рабочее пространство -> Связанные ресурсы »). Ни один из них не работал ... – AEIOU

+0

Есть ли у вас идея, почему затмение не может получить системный путь, и в каких случаях должен быть определен путь среды eclipse? –

-1

Вы можете полностью определить местоположение гс - это, вероятно, лучший способ, так как вы не должны доверять путь системы ...

+0

Вот почему люди пишут программное обеспечение, которое не переносится в другую систему. – sorin

3

(См http://www.devdaily.com/java/java-exec-processbuilder-process-2 за статью, из которой был взят этот фрагмент, вы будете нужны другие классы в там, чтобы заставить его работать.)

Дайте этому дробеструйной

List<String> commands = new ArrayList<String>(); 
    commands.add("/bin/sh"); 
    commands.add("-c"); 
    commands.add("gs -version"); 
    try 
    { 
     ProcessBuilder pb = new ProcessBuilder(commands); 
     Process process = pb.start(); 

     inputStreamHandler = new ThreadedStreamHandler(
       process.getInputStream()); 
     errorStreamHandler = new ThreadedStreamHandler(
       process.getErrorStream()); 

     inputStreamHandler.start(); 
     errorStreamHandler.start(); 

     process.waitFor(); 

     inputStreamHandler.interrupt(); 
     errorStreamHandler.interrupt(); 

     inputStreamHandler.join(); 
     errorStreamHandler.join(); 
    } 
    catch (IOException e) 
    { 
     Log.err(e); 
    } 
    catch (InterruptedException e) 
    { 
     Log.err(e); 
    } 
    StringBuilder stdout = inputStreamHandler.getOutputBuffer(); 
2

в ваших конфигураций Eclipse, Run для вашей программы, перейдите на вкладку окружающей среды и добавить новую переменную окружающей среды называемый «PATH», где значение (в Windows) «C: \ Program Files (x86) \ gs \ gs9.02 \ bin;% PATH%".

Это должно сработать.

Либо это, либо в вашей программе java, вместо выполнения Runtime.exec («gs ...»), выполните Runtime.exec («my-batch-file.bat» ...), где моя -batch-file.bat будет содержать строку, указав путь к исполняемому файлу Ghostscript:

набор PATH = C: \ Program Files (x86) \ гс \ gs9.02 \ Bin;% PATH%

1

I была та же проблема, и я нашел проблему. Переменная Path в Eclipse имела другой контент, чем тот, который находится в командной строке.

Решение:

Посмотрите на переменную $ Path в командной строке и скопируйте содержимое. Затем откройте «Конфигурация запуска->« Среда »и выберите новый. Имя: $ PATH Значение: вставить скопированный контент.

Это решило проблему.