OS X Java .app bundle 无法打开其他应用程序?

OS X Java .app bundle cannot open other apps?

我已经为 OS X 编写了一个 Java SWT 应用程序,将其导出为 .jar 并将其捆绑到 .app 中。除了我的应用程序中的关键部分外,一切都按预期工作;需要打开其他应用程序。

我已经尝试 Runtime.exec(); 以及 ProcessBuilder 来执行此操作,在我需要启动的其他应用程序上调用 open 命令。这在 Eclipse 中工作得很好,或者如果我通过终端启动导出的 .jar。但是,通过双击 .app 启动时它确实不起作用。

我想知道这是我的错误,还是 Java 或 OS X 的限制。因为 Mac 应用程序是沙盒的(据我了解),这就是为什么从应用程序中调用 open 什么都不做的原因吗?

我使用了两种方法来打开我需要的应用程序。这是一款 Steam 游戏,但也有零售版,因此可以通过应用本身或使用 steam:// 协议启动。在我的代码中,我尝试了以下操作:

ProcessBuilder pb = new ProcessBuilder("open", "steam://rungameid/57300//");
pb.start();

ProcessBuilder pb = new ProcessBuilder("open", appDir);
pb.start();

appDir 是一个字符串,其中包含我希望启动的 .app 包的路径。

知道为什么这在 Mac 应用程序包中失败,但在 Eclipse/Jar 中运行良好吗? 运行 带控制台的应用程序(通过捆绑包中的 bash 脚本)没有 return 任何错误,所以在我看来 Java 可以正常运行命令,但是OS X 或许会忽略它?

我也试过在 Google 上搜索这个,但它似乎非常不常见或非常具体,我什么也没找到。

如果steam:是注册的URL类型,可以使用org.eclipse.swt.program.Program#launch(String)。例如:

org.eclipse.swt.program.Program.launch("steam://rungameid/57300//");

我自己回答这个问题,因为问题出在我自己的设置上。具体来说,它是我使用的捆绑运行时。我在这里的另一个问题中写了一个更深入的答案: