2010-04-09 136 views
2

我有下面的代碼類:
Java運行命令行過程

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

我可以在我的命令行中運行 「GS -version」,並得到: GPL Ghostscript的8.71(2010-02-10 ) 版權所有(C)2010 Artifex軟件公司保留所有權利。

所以我知道我的路徑至少設置在某個地方。

我可以從命令行運行該類,它的工作原理。但是,當我運行使用eclipse它,我得到以下錯誤:

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」的,「MVN」,「SVN」和它的作品。但是「gs」沒有。這只是在日食我有這個問題。

任何想法,我需要做什麼來解決這個問題?

回答

3

我想你需要在Eclipse Run配置中將PATH設置爲環境變量。

+0

所以我嘗試在我的「運行配置」 - >環境選項卡和「鏈接資源」(首選項 - >常規 - >工作區 - >鏈接資源)中添加「gs」路徑。沒有工作... – AEIOU 2010-04-13 16:15:50

+0

你有沒有想過爲什麼日食不能獲得系統路徑,在哪些情況下,必須定義Eclipse環境路徑? – 2012-05-11 08:26:11

-1

您可以完全限定GS的位置 - 這可能是最好的辦法,因爲你不應該相信系統的路徑...

+0

這就是爲什麼人們在編寫不能移植到另一個系統的軟件。 – sorin 2012-06-01 16:56:10

3

(從中這個片段被送往文章見http://www.devdaily.com/java/java-exec-processbuilder-process-2,你你要用在那裏的其他類,使其工作。)

給這shot-

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運行配置爲您的程序,轉到環境選項卡,並添加一個新的環境變量稱爲「路徑」,其中值是多少(在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:\程序文件(x86)\ GS \ gs9.02 \ BIN;%PATH%

1

我有同樣的問題,我發現這個問題。 Eclipse中的Path變量的內容與命令行中的不同。

解決方案:

查找在命令行中的$ PATH變量和複製內容。 然後打開運行配置 - >環境並選擇新的。 名稱:$ PATH 值:插入複製的內容。

解決了這個問題。