从java跨平台运行外部进程的方法?

从java跨平台运行外部进程的方法?,java,windows,exec,Java,Windows,Exec,我需要从Java调用一个外部程序,比如ImageMagick的convert。它在Windows上无法工作,除非我将cmd/c放在实际命令之前 String source = "test.jpg"; String result = "test-thumbnail.jpg"; ProcessBuilder builder = new ProcessBuilder().command("cmd", "/c", "convert", source, "-thumbnail", "295x", res

我需要从Java调用一个外部程序,比如ImageMagick的
convert
。它在Windows上无法工作,除非我将
cmd/c
放在实际命令之前

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
,我会遇到与这里描述的非常类似的问题:-存在一个本机Windows
convert.exe
,而不是调用ImageMagick的
convert.exe
。似乎子进程的环境没有选择路径

我仔细检查了我的系统
路径
是否在
C:\Windows\system32
之前有ImageMagick目录。另外,当我在Windows命令行中键入命令时,该命令本身运行良好。

您可以检查操作系统

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

是的,好吧,这会起作用,但我想了解为什么首先需要
cmd/c
?我不确定,但我认为,虽然un-linux命令是操作系统的主程序,但在windows上,cmd只是一个额外的程序。
cmd
是开始的过程(基本上它会打开一个新的控制台窗口),
/c
告诉您,在进程运行后,不要让控制台保持活动状态(因此它会自行关闭)。仅出于调试目的,请尝试转到c:\Windows\System32并将
convert.exe
重命名为
msconvert.exe