OS X : "open" command won't run if . 应用程序包中的 Java 包含 JVM bundle

标签 java macos jar .app

我正在尝试从 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/ 来实现此目的。之后,我编辑了名为 JVMRuntimeInfo.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/

相关文章:

objective-c - 在 Interface Builder 中使 NSButton 跟随 ScrollView

java - 没有结束的循环

java - 捕获异常的歧义

java - 在 Clojure 中使用 java.nio.Paths 会引发奇怪的异常

java - 为什么 jar 文件在通过双击启动时没有从磁盘读取的权限 - 但如果从终端启动则没有?

objective-c - 在显示新内容之前调整窗口大小

linux - jar 文件的 Systemd 服务在几分钟后出现 "operation timed out"错误或停留在 "activating mode"

api - 读取 JAR 文件的内容(在运行时)?

android - 实现activity如何在android中使用jar中的方法

java - 如何返回 Java ArrayList 中的第一个最大值