我正在尝试从 Java 应用程序创建一个独立的 Mac 应用程序。我已经设置了 .app 目录,配置了 Info.plist
文件,在依赖项和 Java 运行时中进行了烘焙。我成功地打开了 .app 并启动了程序,除了一段特殊的代码之外,一切正常:
ProcessBuilder pb = new ProcessBuilder("open", "/Applications/TextEdit.app");
pb.start();
当我启动 .app 时,这段代码似乎没有运行或至少没有执行任何操作。如果我打开包内容并启动 .jar,它运行正常。我设法将其范围缩小到仅当 .app 包含 Java 运行时包时才发生。由于运行 .jar 使用系统的 Java,而运行 .app 使用捆绑的 Java,这就是我苦苦挣扎的原因。
我的Mac安装的Java JDK的版本应该是1.8.0_77。 捆绑版本应为 1.8.0_74。我从Moneydance抓起它应用程序,因为我在制作 .app 时将其用作引用。
非常感谢任何帮助,因为这应该是发布它的最后一步。我创建这个问题比我的其他问题更具体 here .
最佳答案
所以我会自己回答这个问题,因为这个问题在某种程度上是在我这边。
我使用的捆绑 JVM(我从 Moneydance 应用程序复制的)是罪魁祸首。我怀疑 Moneydance 的创建者可能已经剥离了他们的应用程序不使用的运行时功能包,以减少文件大小。不管出于什么原因,我的问题通过创建自己的 bundle 得到了解决。
我通过将 /Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk
复制到 MyApp.app/Contents/PlugIns/
来实现此目的。之后,我编辑了名为 JVMRuntime
的 Info.plist
键以使用条目 jdk1.8.0_77.jdk
。我的应用程序现在使用此 JDK 而不是我之前拥有的 bundle ,并且 open
现在可以正常工作。
很抱歉没有做功课,但感谢那些提供帮助的人。我在编写重现步骤时发现了这个问题,所以如果没有你我可能无法找到它。我想我只能对那些可能遇到类似情况的人说的是检查您的 JVM 包。
关于OS X : "open" command won't run if . 应用程序包中的 Java 包含 JVM bundle ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36693058/