Java运行命令行过程

问题描述:

我有下面的代码类:
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”没有。这只是在日食我有这个问题。

任何想法,我需要做什么来解决这个问题?

我想你需要在Eclipse Run配置中将PATH设置为环境变量。

+0

所以我尝试在我的“运行配置” - >环境选项卡和“链接资源”(首选项 - >常规 - >工作区 - >链接资源)中添加“gs”路径。没有工作... – AEIOU 2010-04-13 16:15:50

+0

你有没有想过为什么日食不能获得系统路径,在哪些情况下,必须定义Eclipse环境路径? – 2012-05-11 08:26:11

您可以完全限定GS的位置 - 这可能是最好的办法,因为你不应该相信系统的路径...

+0

这就是为什么人们在编写不能移植到另一个系统的软件。 – sorin 2012-06-01 16:56:10

(从中这个片段被送往文章见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(); 

在您的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%

我有同样的问题,我发现这个问题。 Eclipse中的Path变量的内容与命令行中的不同。

解决方案:

查找在命令行中的$ PATH变量和复制内容。 然后打开运行配置 - >环境并选择新的。 名称:$ PATH 值:插入复制的内容。

解决了这个问题。