从java跨平台运行外部进程的方法?
我需要从Java调用一个外部程序,比如ImageMagick的从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
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
,我会遇到与这里描述的非常类似的问题:-存在一个本机Windowsconvert.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