我有一个包含以下代码的课程:
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”却没有。这只是在日食中我遇到了这个问题。
关于我需要做些什么来解决这个问题?
答案 0 :(得分:3)
我认为您需要在Eclipse Run配置中将PATH设置为环境变量。
答案 1 :(得分: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 :(得分:2)
在程序的Eclipse Run Configurations中,转到Environment选项卡并添加一个名为“PATH”的新环境变量,其值如下所示(在Windows中)“C:\ Program Files(x86)\ gs \ gs9.02 \ BIN;%PATH%”
这应该有用。
要么是在java程序中,要么在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%
答案 3 :(得分:1)
我有同样的问题,我发现了问题。 Eclipse中的Path变量与命令行中的路径变量的内容不同。
<强>解决方案:强>
在命令行中查找$ Path变量并复制内容。 然后打开Run Configuration-&gt; Environment并选择new。 名称:$ PATH 值:插入复制的内容。
这解决了问题。
答案 4 :(得分:-1)
你可以完全限定gs的位置 - 这可能是最好的方法,因为你不应该信任系统的路径......