我已经为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可能会忽略它?
我也试过在谷歌上搜索这个,但它似乎非常罕见,或者只是非常具体,我什么都找不到。
我自己回答这个问题,因为问题出在我自己的设置上。特别是我使用的捆绑运行时。我在这里的另一个问题中写了一个更深入的答案:
OS X上的Java:如果.app包包含JVM捆绑包
如果steam:
是已注册的URL类型,则可以使用org.eclipse.swt.program.Program#launch(String)
。例如:
org.eclipse.swt.program.Program.launch("steam://rungameid/57300//");