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

问题描述

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

OS X上的Java:如果.app软件包包含JVM捆绑包,则“open”命令将无法运行

解决方法

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

我试过Runtime.exec();,以及ProcessBuilder要做到这一点,调用open命令的其他应用程序,我需要对发布。从Eclipse或通过Terminal启动导出的.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可能会忽略它?

我也尝试过在Google上搜索此内容,但似乎很不常见或非常具体,我什么也找不到。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...