2015-06-03 16 views
2

我需要从Java调用外部程序,例如ImageMagick的convert。它不能在Windows上工作,除非我在实际命令之前放置cmd /c从java运行外部进程的跨平台方式?

String source = "test.jpg"; 
String result = "test-thumbnail.jpg"; 
ProcessBuilder builder = new ProcessBuilder().command("cmd", "/c", "convert", source, "-thumbnail", "295x", result); 
Process process = builder.start(); 

怎样避免使用cmd /c让我的代码适用于其他操作系统比Windows?

没有cmd /c我进入非常类似的问题如下所述:running imagemagick convert (console application) from python - 存在一个本地Windows convert.exe这是被称为而非ImageMagick的convert.exe。好像PATH不是由子进程的环境挑选的。

我有双重检查,我的系统PATHC:\Windows\system32之前的ImageMagick目录。当我将它输入到Windows命令行时,命令本身也可以很好地运行。

+0

只是为了调试的目的,尝试将C:\ Windows \ System32下并重命名'convert.exe'为'msconvert.exe' –

回答

1

您可以检查操作系统。

private static String OS = System.getProperty("os.name") 
+0

是啊,这会工作,但我想明白为什么' cmd/c'是需要在第一个地方? – stys

+0

我对此一无所知,但我认为虽然un linux命令是操作系统的主要程序,但在Windows中,cmd只是一个程序。 –