如何使用Java应用程序在Mac OS X上打开System Profiler.app?

时间:2011-03-29 19:39:37

标签: java macos runtime

我必须从我的Java应用程序中显示Mac OS X的系统信息。

我创建了一个按钮并尝试执行以下操作:

private static String[] sysInfoPathMac =
    {"/usr/bin/open", "'/Applications/Utilities/System Profiler.app'"};

在按钮的click事件中,我执行以下命令:

Runtime.getRuntime().exec(sysInfoPathMac);

点击按钮后,我什么都没得到。它不会抛出任何错误,也不会运行系统分析器。

我到底做错了什么以及如何完成它?

1 个答案:

答案 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