使用 launch4j 和 jdk8 包装的 .exe 需要很长时间才能启动。使用 jdk7 几乎立即启动
Wrapped .exe with launch4j and jdk8 takes very long to start. Using jdk7 instead starts almost instant
我有以下问题:
我曾经有一个 launch4j 配置来使用捆绑 jdk/jre7 从我的可运行 jar 创建一个包装的可执行文件已经有一段时间了。
Programm(用那个 .exe 启动)几乎立即用 jdk7 启动。
我现在不得不切换到 jdk8,这导致启动非常缓慢。一切正常,这不是问题,但该 .exe 的启动过程需要大约 1-2 分钟,我只是不明白为什么。
从 eclipse 中启动应用程序(使用相同的 JDK8)它会在几秒钟内再次启动(它应该!)。
所以...任何可能导致此问题的想法以及如何解决它?
这是我现在的 l4j.xml:
<?xml version="1.0" encoding="UTF-8"?>
<launch4jConfig>
<dontWrapJar>false</dontWrapJar>
<headerType>gui</headerType>
<jar>C:\Users\user\workspace\DataUpdater\release\bin\DataUpdater-v2.6.1.jar</jar>
<outfile>C:\Users\user\workspace\DataUpdater\release\DataUpdater.exe</outfile>
<errTitle>DataUpdater: Kein kompatibles JRE gefunden</errTitle>
<cmdLine></cmdLine>
<chdir>.</chdir>
<priority>high</priority>
<downloadUrl>http://java.com/download</downloadUrl>
<supportUrl>https://www.google.de/</supportUrl>
<stayAlive>true</stayAlive>
<restartOnCrash>false</restartOnCrash>
<manifest></manifest>
<icon>C:\Users\user\workspace\DataUpdater\res\icons\DataUpdater.ico</icon>
<singleInstance>
<mutexName>DataUpdater v2.6.1</mutexName>
<windowTitle>DataUpdater v2.6.1</windowTitle>
</singleInstance>
<jre>
<path>./bundeled/jre1.8.0_92</path>
<bundledJre64Bit>true</bundledJre64Bit>
<bundledJreAsFallback>false</bundledJreAsFallback>
<minVersion>1.8.0</minVersion>
<maxVersion>1.8.0_92</maxVersion>
<jdkPreference>jdkOnly</jdkPreference>
<runtimeBits>64</runtimeBits>
<initialHeapPercent>33</initialHeapPercent>
<maxHeapPercent>80</maxHeapPercent>
<opt>-Dfile.encoding=UTF-8</opt>
</jre>
<versionInfo>
<fileVersion>2.6.1.0</fileVersion>
<txtFileVersion>v2.6.1</txtFileVersion>
<fileDescription>DataUpdater: Anwendung zum aktualisieren von -Datensätzen mittels externer Datenquellen wie Excel-Tabellen direkt auf Datenbankebene.</fileDescription>
<copyright>Max Mustermann</copyright>
<productVersion>2.6.1.0</productVersion>
<txtProductVersion>v2.6.1</txtProductVersion>
<productName>DataUpdater</productName>
<companyName>Max Mustermann</companyName>
<internalName>DataUpdater v2.6.1</internalName>
<originalFilename>DataUpdater.exe</originalFilename>
</versionInfo>
<messages>
<startupErr>DataUpdater konnte nicht gestartet werden. </startupErr>
<bundledJreErr>DataUpdater erwartet ein bundled JRE. Dieses wurde nicht gefunden oder ist beschädigt.</bundledJreErr>
<jreVersionErr>DataUpdater benötigt eine Java Laufzeitumgebung. Diese konnte nicht gefunden werden.
Bitte stellen Sie sicher, dass Java 8 auf Ihrem System installiert ist.</jreVersionErr>
<launcherErr>Die Windows Registry verweist auf eine nicht mehr vorhandene oder beschädigte Java Installation.</launcherErr>
<instanceAlreadyExistsMsg>DataUpdater wird bereits ausgeführt.
Es ist immer nur eine DataUpdater-Instanz gleichzeitig erlaubt.</instanceAlreadyExistsMsg>
</messages>
</launch4jConfig>
编辑:
可执行文件在许多不同的机器上反应相同,因此它与我的本地环境无关...
附加信息:
我刚刚注意到,直接从 jar 启动应用程序而不是可执行文件会导致同样缓慢的启动。
所以这必须以某种方式与 jdk8 有关,而不是 l4j。
我不明白的是为什么它使用相同的 jdk8 从 eclipse 中启动得如此之快。
经过长时间的研究,没有任何好的结果,我注意到,这个 "hang up" 与 launch4j & Java 8 无关,但与 log4j 和 Java 8 有关。
仍然不清楚是什么导致了这种情况,但这是另一个问题的主题。
我有以下问题:
我曾经有一个 launch4j 配置来使用捆绑 jdk/jre7 从我的可运行 jar 创建一个包装的可执行文件已经有一段时间了。
Programm(用那个 .exe 启动)几乎立即用 jdk7 启动。 我现在不得不切换到 jdk8,这导致启动非常缓慢。一切正常,这不是问题,但该 .exe 的启动过程需要大约 1-2 分钟,我只是不明白为什么。
从 eclipse 中启动应用程序(使用相同的 JDK8)它会在几秒钟内再次启动(它应该!)。
所以...任何可能导致此问题的想法以及如何解决它?
这是我现在的 l4j.xml:
<?xml version="1.0" encoding="UTF-8"?>
<launch4jConfig>
<dontWrapJar>false</dontWrapJar>
<headerType>gui</headerType>
<jar>C:\Users\user\workspace\DataUpdater\release\bin\DataUpdater-v2.6.1.jar</jar>
<outfile>C:\Users\user\workspace\DataUpdater\release\DataUpdater.exe</outfile>
<errTitle>DataUpdater: Kein kompatibles JRE gefunden</errTitle>
<cmdLine></cmdLine>
<chdir>.</chdir>
<priority>high</priority>
<downloadUrl>http://java.com/download</downloadUrl>
<supportUrl>https://www.google.de/</supportUrl>
<stayAlive>true</stayAlive>
<restartOnCrash>false</restartOnCrash>
<manifest></manifest>
<icon>C:\Users\user\workspace\DataUpdater\res\icons\DataUpdater.ico</icon>
<singleInstance>
<mutexName>DataUpdater v2.6.1</mutexName>
<windowTitle>DataUpdater v2.6.1</windowTitle>
</singleInstance>
<jre>
<path>./bundeled/jre1.8.0_92</path>
<bundledJre64Bit>true</bundledJre64Bit>
<bundledJreAsFallback>false</bundledJreAsFallback>
<minVersion>1.8.0</minVersion>
<maxVersion>1.8.0_92</maxVersion>
<jdkPreference>jdkOnly</jdkPreference>
<runtimeBits>64</runtimeBits>
<initialHeapPercent>33</initialHeapPercent>
<maxHeapPercent>80</maxHeapPercent>
<opt>-Dfile.encoding=UTF-8</opt>
</jre>
<versionInfo>
<fileVersion>2.6.1.0</fileVersion>
<txtFileVersion>v2.6.1</txtFileVersion>
<fileDescription>DataUpdater: Anwendung zum aktualisieren von -Datensätzen mittels externer Datenquellen wie Excel-Tabellen direkt auf Datenbankebene.</fileDescription>
<copyright>Max Mustermann</copyright>
<productVersion>2.6.1.0</productVersion>
<txtProductVersion>v2.6.1</txtProductVersion>
<productName>DataUpdater</productName>
<companyName>Max Mustermann</companyName>
<internalName>DataUpdater v2.6.1</internalName>
<originalFilename>DataUpdater.exe</originalFilename>
</versionInfo>
<messages>
<startupErr>DataUpdater konnte nicht gestartet werden. </startupErr>
<bundledJreErr>DataUpdater erwartet ein bundled JRE. Dieses wurde nicht gefunden oder ist beschädigt.</bundledJreErr>
<jreVersionErr>DataUpdater benötigt eine Java Laufzeitumgebung. Diese konnte nicht gefunden werden.
Bitte stellen Sie sicher, dass Java 8 auf Ihrem System installiert ist.</jreVersionErr>
<launcherErr>Die Windows Registry verweist auf eine nicht mehr vorhandene oder beschädigte Java Installation.</launcherErr>
<instanceAlreadyExistsMsg>DataUpdater wird bereits ausgeführt.
Es ist immer nur eine DataUpdater-Instanz gleichzeitig erlaubt.</instanceAlreadyExistsMsg>
</messages>
</launch4jConfig>
编辑: 可执行文件在许多不同的机器上反应相同,因此它与我的本地环境无关...
附加信息: 我刚刚注意到,直接从 jar 启动应用程序而不是可执行文件会导致同样缓慢的启动。 所以这必须以某种方式与 jdk8 有关,而不是 l4j。 我不明白的是为什么它使用相同的 jdk8 从 eclipse 中启动得如此之快。
经过长时间的研究,没有任何好的结果,我注意到,这个 "hang up" 与 launch4j & Java 8 无关,但与 log4j 和 Java 8 有关。
仍然不清楚是什么导致了这种情况,但这是另一个问题的主题。