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设置为环境变量。
您可以完全限定GS的位置 - 这可能是最好的办法,因为你不应该相信系统的路径...
这就是为什么人们在编写不能移植到另一个系统的软件。 – 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 值:插入复制的内容。
解决了这个问题。
所以我尝试在我的“运行配置” - >环境选项卡和“链接资源”(首选项 - >常规 - >工作区 - >链接资源)中添加“gs”路径。没有工作... – AEIOU 2010-04-13 16:15:50
你有没有想过为什么日食不能获得系统路径,在哪些情况下,必须定义Eclipse环境路径? – 2012-05-11 08:26:11