3

我有一个带有以下代码的类:

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 Software, Inc. 保留所有权利。

所以我知道我至少在某个地方设置了路径。

我可以从命令行运行该类并且它可以工作。但是当我使用 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中我才有这个问题。

关于我需要做些什么来解决这个问题的任何想法?

4

5 回答 5

3

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

于 2010-04-09T19:55:02.600 回答
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();
于 2010-04-09T19:57:32.203 回答
2

在您的程序的 Eclipse 运行配置中,转到 Environment 选项卡并添加一个名为“PATH”的新环境变量,其中的值类似于(在 Windows 中)“C:\Program Files (x86)\gs\gs9.02 \bin;%PATH%"。

这应该有效。

无论是那个还是在你的 java 程序中,而不是执行 Runtime.exec("gs..."),而是执行一个 Runtime.exec("my-batch-file.bat"...) 其中 my-batch-file .bat 将包含一行设置 ghostscript 可执行文件的路径:

设置 PATH=C:\Program Files (x86)\gs\gs9.02\bin;%PATH%

于 2011-09-11T22:34:34.590 回答
1

我有同样的问题,我发现了问题。Eclipse 中的路径变量的内容与命令行中的不同。

解决方案:

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

这解决了问题。

于 2012-01-11T10:29:43.110 回答
-1

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

于 2010-04-09T19:57:17.303 回答