我为 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 可能会忽略它?
我也尝试在谷歌上搜索这个,但它似乎非常不常见或只是非常具体,我无法找到任何东西。