我必须从我的Java应用程序中显示Mac OS X的系统信息。
我创建了一个按钮并尝试执行以下操作:
private static String[] sysInfoPathMac =
{"/usr/bin/open", "'/Applications/Utilities/System Profiler.app'"};
在按钮的click事件中,我执行以下命令:
Runtime.getRuntime().exec(sysInfoPathMac);
点击按钮后,我什么都没得到。它不会抛出任何错误,也不会运行系统分析器。
我到底做错了什么以及如何完成它?
答案 0 :(得分:1)
删除单引号。当您从shell运行命令时,需要引号,因为参数中有一个空格。从Java启动进程时这不是问题,因为无论数组是否包含空格,数组的每个元素都被视为一个单独的参数。
String[] command = {"/usr/bin/open", "/Applications/Utilities/System Profiler.app"};
Process proc = Runtime.getRuntime().exec(command);
int resultCode = proc.waitFor();
if (resultCode != 0) {
throw new Exception("failed to open system profiler");
}
请注意,通常在使用Runtime.exec()时,您需要使用stdout和stderr流以避免死锁(尽管在这种情况下它不是问题,因为'open'命令不会产生太多输出) 。有关该主题的更多信息,请查看Michael C. Daconta的文章“当Runtime.exec()不会” http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html