0

我为 macOS 编写了一个基于 Java 的应用程序,该应用程序是使用javapackagerJava 8 中的 Oracle 创建的。它运行了几个月,直到发生了一些变化,可能是由于最近的 Java 更新,现在当我重建应用程序时,结果退出时没有任何消息执行。直接在终端外壳(即使用java -jar path/to/my.jar)中运行 jar 文件本身可以正常工作而不会出错。我不知道该.app版本出了什么问题,并且无法弄清楚如何从 javapackager 创建的任何东西中获取任何诊断信息。

如何跟踪.app创建的 usingjavapackager在运行时的作用?

我正在使用 Oracles Java 1.8 u152 的-deploy -native image选项javapackager在 OSX 10.12.6 上创建应用程序。我的问题特别是关于如何获得结果.app以打印它正在做的事情,或获得错误诊断或其他东西,以帮助弄清楚它在幕后所做的事情。我不需要帮助来运行javapackager自己。

我认为使用Console将有助于了解正在发生的事情,但信息太稀疏,我难以解释。在隐藏了很多其他进程输出之后,归结为正在打印以下内容:

default 22:43:22.523842 -0800   taskgated   MacOS error: -67062
default 22:43:22.733680 -0800   SBML Test Runner    WARNING: The Gestalt selector gestaltSystemVersion is returning 10.9.6 instead of 10.12.6. This is not a bug in Gestalt -- it is a documented limitation. Use NSProcessInfo's operatingSystemVersion property to get correct system version number.
Call location:
default 22:43:22.733853 -0800   SBML Test Runner    0   CarbonCore                          0x00007fff97a4d1b1 ___Gestalt_SystemVersion_block_invoke + 121
default 22:43:22.733876 -0800   SBML Test Runner    1   libdispatch.dylib                   0x00007fffac28b8fc _dispatch_client_callout + 8
default 22:43:22.733897 -0800   SBML Test Runner    2   libdispatch.dylib                   0x00007fffac28b8b9 dispatch_once_f + 38
default 22:43:22.733930 -0800   SBML Test Runner    3   CarbonCore                          0x00007fff979db292 _Gestalt_SystemVersion + 976
default 22:43:22.733982 -0800   SBML Test Runner    4   CarbonCore                          0x00007fff979daaad Gestalt + 139
default 22:43:22.734010 -0800   SBML Test Runner    5   libswt-pi-cocoa-4628.jnilib         0x00000001283072de Java_org_eclipse_swt_internal_cocoa_OS_Gestalt + 158
default 22:43:22.734028 -0800   SBML Test Runner    6   ???                                 0x00000001067919f4 0x0 + 4403567092

尽管taskgated起初该错误似乎相关,但一些谷歌搜索表明这是一个常见问题而不是致命的。

4

1 回答 1

1

首先,我将通过终端调用打包的应用程序包中的二进制文件来验证实际的 JVM 是否启动:

/Applications/MyApp.app/Contents/MacOS/MyApp

如果出现 JVM 错误,您会将输出打印到标准输出。如果可以确认 JVM 正常启动,或许可以使用jvisualvm做进一步分析。

于 2018-02-28T11:23:12.427 回答