【发布时间】:2016-08-05 06:12:40
【问题描述】:
我为 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 可能会忽略它?
我也尝试在 Google 上搜索此内容,但它似乎非常罕见或非常具体,我无法找到任何东西。
【问题讨论】:
-
您在控制台中收到任何消息吗?
-
您是否尝试过使用
Runtime.exec(),详情请参阅此处的答案:stackoverflow.com/questions/19456454/… -
您究竟为“appDir”指定了什么?
-
@Francis 我最初使用
Runtime.exec(),命令只有一个字符串。它具有相同的效果,但我转到ProcessBuilder看看它是否有任何不同。我还没有用字符串数组尝试Runtime.exec()(但我可以在几个小时内尝试)。 -
@greg-449
appDir是一个动态字符串,其中包含 .app 包的绝对路径。例如/Applications/TextEdit.app
标签: java eclipse macos swt .app