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

标签 java macos runtime

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

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

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

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

Runtime.getRuntime().exec(sysInfoPathMac);

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

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

最佳答案

删除单引号。当您从 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 的文章“When Runtime.exec() Won't” http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html

关于java - 如何使用 Java 应用程序在 Mac OS X 上打开 System Profiler.app?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5477949/

相关文章:

java - 尝试根据选中的表单复选框影响数据库列

java - 使用 Java 将所有错误答案添加到数组中 - 如何?

java - 如何在 Mac 上从 ant 启动 shell 脚本?

swift - 无法将类型 'SCNView' 的值转换为 'SKView'

c++ - 是否可以确定(在运行时)功能是否已实现?

基于Set类型的Java流过滤器

java - HashTable中的排序问题

macos - 为什么awk脚本在Mac OS上不起作用,而在Linux上起作用?

macos - 查找文件夹中 PDF 的数量

c - 当我直到运行时才知道有多少参数时,在 C 中使用 printf