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

我为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脚本)不会返回任何错误,因此在我看来Java运行命令很好,但OS X可能会忽略它?

我也曾尝试在谷歌搜索这个,但它似乎非常罕见或只是非常具体,我无法找到任何东西。

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

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

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

OS X上的Java:如果.app包中包含JVM包,则不会运行“open”命令