繁体   English   中英

Java Runtime命令行进程

[英]Java Runtime command line Process

我有一个包含以下代码的类:

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

在我的程序中,我可以用“java”,“mvn”,“svn”替换“gs”,它可以工作。 但“gs”却没有。 只有在日食中我才有这个问题。

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

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

(有关从中获取此代码段的文章,请参阅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();

在程序的Eclipse Run Configurations中,转到Environment选项卡并添加一个名为“PATH”的新环境变量,其值如下所示(在Windows中)“C:\\ Program Files(x86)\\ gs \\ gs9.02 \\ BIN;%PATH%”。

这应该工作。

要么是在java程序中,要么在java程序中,而不是运行Runtime.exec(“gs ...”),在my-batch-file中运行Runtime.exec(“my-batch-file.bat”...) .bat将包含一行设置ghostscript可执行文件的路径:

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

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

解:

在命令行中查找$ Path变量并复制内容。 然后打开Run Configuration-> Environment并选择new。 名称:$ PATH值:插入复制的内容。

这解决了问题。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM