1

我们有一个应用程序,我们最近添加了 JavaFX,并更新到最新的 JRE,现在 Jwrapper 不会在 Windows 上启动该应用程序(MacOS 和 Linux 都可以)。

我们已经按照这篇文章http://www.jwrapper.com/blog/bundling-javafx-into-a-native-exe上的说明进行操作,并相应地更改了我们的 JWrapper 配置。

我们使用的是JDK1.80_102和JWrapper版本:jwrapper-00044250826.jar。我们正在通过 maven 构建(我们有一个插件可以做到这一点)。

应用程序下载,但不会启动。请参阅以下日志:

+0        ----- Starting Launcher -----
+0        [Launcher]     Arg[0]=C:\Users\username\AppData\Roaming\JWrapper-APPNAME (UAT)\JWrapper-Windows64JRE-00046316492-complete\bin\APPNAME (UAT).exe
+0        [Launcher]     Arg[1]=-cp
+0        [Launcher]     Arg[2]=C:\Users\username\AppData\Roaming\JWrapper-APPNAME (UAT)\JWrapper-APPNAME (UAT)-00046316696-complete\jarname-all-3012-SNAPSHOT.jar;C:\Users\username\AppData\Roaming\JWrapper-APPNAME (UAT)\JWrapper-APPNAME (UAT)-00046316696-complete\jwrapper_utils.jar
+0        [Launcher]     Arg[3]=-Xms256m
+0        [Launcher]     Arg[4]=-Xmx1024m
+0        [Launcher]     Arg[5]=-Duser.groovyServer=groovy.server.url.com
+0        [Launcher]     Arg[6]=-DcurrentEnvironment=UAT
+0        [Launcher]     Arg[7]=-DreqServerVersion=2016-09-08:1.0-0
+0        [Launcher]     Arg[8]=-DprojectVersion=3012-SNAPSHOT
+0        [Launcher]     Arg[9]=-DstartBanner=o3gui/images/app_banner.gif
+0        [Launcher]     Arg[10]=-Dswing.aatext=true
+0        [Launcher]     Arg[11]=-Dapple.laf.useScreenMenuBar=true
+0        [Launcher]     Arg[12]=-Dcom.apple.mrj.application.apple.menu.about.name=APPNAME
+0        [Launcher]     Arg[13]=3
+0        [Launcher]     Arg[14]=-Djavafx.macosx.embedded=true
+0        [Launcher]     Arg[15]=jwrapper.JWrapper
+0        [Launcher]     Arg[16]=C:\Users\username\AppData\Roaming\JWrapper-APPNAME (UAT)\JWrapper-APPNAME (UAT)-00046316696-complete\JWLaunchProperties-1473288163056-24
+15       [Launcher] Found tail marker
+0        [Launcher] App Name = APPNAME (UAT)
+0        [Launcher] App Version = 
+0        [Launcher] JRE Version = 
+0        [Launcher] GU Version = 
+0        [Launcher] Min Splash MS = 850
+0        [Launcher] Signature Public Key = 
+0        [Launcher] Can Override Splash = 0
+0        [Launcher] Install Type = perm_user
+0        [Launcher] Silent Parameter = 
+0        [Launcher] Update URL = 8
+0        [Launcher] ExePath is C:\Users\username\AppData\Roaming\JWrapper-APPNAME (UAT)\JWrapper-Windows64JRE-00046316492-complete\bin\APPNAME (UAT).exe
+0        [Launcher] Master dir from exe path is C:\Users\username\AppData\Roaming\JWrapper-APPNAME (UAT)
+0        [Launcher] Master folder is C:\Users\username\AppData\Roaming\JWrapper-APPNAME (UAT)
+0        [Launcher] Located existing bin JRE runtime = C:\Users\username\AppData\Roaming\JWrapper-APPNAME (UAT)\JWrapper-Windows64JRE-00046316492-complete
+0        [Launcher] JRE path is C:\Users\username\AppData\Roaming\JWrapper-APPNAME (UAT)\JWrapper-Windows64JRE-00046316492-complete
+0        [JNILaunch] Bin folder is C:\Users\username\AppData\Roaming\JWrapper-APPNAME (UAT)\JWrapper-Windows64JRE-00046316492-complete\bin
+0        File exists: C:\Users\username\AppData\Roaming\JWrapper-APPNAME (UAT)\JWrapper-Windows64JRE-00046316492-complete\bin\server\jvm.dll
+0        [JNILaunch] Trying to load library C:\Users\username\AppData\Roaming\JWrapper-APPNAME (UAT)\JWrapper-Windows64JRE-00046316492-complete\bin\server\jvm.dll [exists=1]
+1        [JNILaunch] Unable to load library. Will attempt fallback.
+0        [JNILaunch] Trying to load library C:\Users\username\AppData\Roaming\JWrapper-APPNAME (UAT)\JWrapper-Windows64JRE-00046316492-complete\bin\client\jvm.dll [exists=0]
+0        [JNILaunch] Unable to load second library.
+0        [JNILaunch] [ERROR] Unable to load JRE library!
4

1 回答 1

0

注意:这是一种解决方法,而不是解决此问题的方法。

如果其他人遇到此问题,一种解决方法是使用32 位Windows JRE。

从日志中可以看出,当 JWrapper 启动 JNI 时,它将首先尝试“服务器”JVM ( ...\bin\server\jvm.dll),它存在于 64 位 JRE 中。

然后,在它由于某种原因失败后(JWrapper 没有提供任何有用的信息),JWrapper 将尝试加载“客户端”JVM(...\bin\client\jvm.dll)。

“客户端”JVM 在 64 位 JRE 中不存在(而且它已经存在很长时间了,不知道为什么 JWrapper 仍在尝试加载它)。

现在,如果您使用32 位版本,您应该注意到日志中的变化:

++++++++++++++++++++++++++++++++++++++++++++++++
[JNILaunch] Bin folder is C:\Users\IEUser\AppData\Roaming\JWrapperApp\JWrapper-Windows64JRE-00046325420-complete\bin
[JNILaunch] Trying to load library C:\Users\IEUser\AppData\Roaming\JWrapperApp\JWrapper-Windows64JRE-00046325420-complete\bin\server\jvm.dll [exists=0]
[JNILaunch] Unable to load library. Will attempt fallback.
File exists: C:\Users\IEUser\AppData\Roaming\JWrapperApp\JWrapper-Windows64JRE-00046325420-complete\bin\client\jvm.dll
[JNILaunch] Trying to load library C:\Users\IEUser\AppData\Roaming\JWrapperApp\JWrapper-Windows64JRE-00046325420-complete\bin\client\jvm.dll [exists=1]
[JNILaunch] Unable to load second library.
[JNILaunch] [ERROR] Unable to load JRE library!
[Extractor] Return code for JNI launch was 1
------------------------------------------------
--- End: JNI Launch

------------------------------------------------
[Extractor] JNI launch failed. Attempting legacy spawn instead
[Extractor] Attempting spawn launch
++++++++++++++++++++++++++++++++++++++++++++++++
+++ Start: Spawn launch

++++++++++++++++++++++++++++++++++++++++++++++++
[Utils] Closing logging file.

现在情况颠倒了,找不到“服务器”JVM,而“客户端”在那里(如预期的那样)。

尽管如此,JWrapper 仍然无法加载它,并且它仍然没有提供任何有用的信息来说明为什么它无法加载。

现在的主要区别在于,即使 JWrapper 无法加载客户端 JVM,它也会尝试使用 legacy spawn,这在我的情况下运行良好。

于 2016-09-09T00:52:40.380 回答