【发布时间】:2016-08-10 03:16:44
【问题描述】:
我正在尝试从 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下PATH环境变量的打印会很有趣。
-
@RealSkeptic 似乎两者都输出
/usr/bin:/bin:/usr/sbin:/sbin的相同PATH -
好的,那么接下来要做的就是告诉我们进程的确切退出代码是什么,如果它不为零,给我们错误流的内容。
-
我目前没有从我的工作站(而是一个 Mac 虚拟机)运行它,所以我在工具方面有点障碍。获取此信息的最简单方法是什么?如果我从包中运行 unix 可执行文件,我会得到一个终端日志窗口,它不会提示任何错误。当我单击虚拟应用程序中的按钮时,它只会在标题栏中短暂显示
jspawnhelper(尽管我猜这无关紧要)。如果需要的话,我会在几个小时后回到我的电脑前,只是想用我同时拥有的东西来解决这个问题。 -
我的意思是您必须更改该 Java 应用程序,以便它将该信息打印到日志中 - 它应该具有获取流程结果并读取流程错误流的内容,否则该信息丢失了。请注意,为了让我们能够帮助您,您的问题应包括相关代码,最好以minimal reproducible example 的形式。没有人会运行未知人下载的 zip,这违反了 StackOverflow 规则(请参阅 help center)。