所以这个错误是一个奇怪的错误......
我正在使用 EXE4J 6 为我的 JavaFX 应用程序构建一个 .exe 文件。这在 Java 版本 13.0.1 中没有问题。我最近升级了我的环境以使用 Java 14.0.1,现在每当我尝试通过 exe 运行我的应用程序时,我都会得到以下堆栈跟踪:
java.lang.RuntimeException: Exception in Application start method
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(Unknown Source)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.lang.InternalError: platform encoding not initialized
at java.base/java.net.Inet6AddressImpl.getLocalHostName(Native Method)
at java.base/java.net.InetAddress.getLocalHost(Unknown Source)
at org.apache.logging.log4j.core.util.NetUtils.getLocalHostname(NetUtils.java:54)
at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:612)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:691)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:708)
at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:263)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:243)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45)
at org.apache.logging.log4j.LogManager.getContext(LogManager.java:174)
at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:669)
尝试初始化我的 Log4J 日志记录时会发生此错误。但是,如果我只是直接调用,InetAddress.getLocalHost()
我可以从 .exe 中复制此错误。直接从我的 Eclipse (EE 06/2020) 中运行我的应用程序就可以了。在做了一些调试之后。我确定从我的 PATH 中删除 Java 允许应用程序运行。我的 .exe4j 配置文件已设置,因此应用程序应查找单独的 Java 14 jre,而不是尝试将我的 PATH 用于 java。
<searchSequence>
<directory location="../java/jre64" />
</searchSequence>
jre64 是通过 ANT 使用我拥有的 14.0.1 jdk 构建的,并且只导入我需要的模块。同样,在我升级到 14.0.1 之前,这一切都在 13.0.1 中运行
从其他计算机上的研究和测试来看,我认为这归结为我计算机上的环境问题。但是,我已经没有地方可以看了。任何想法或想法将不胜感激。特别是为什么 EXE4J 会尝试在我的路径上使用 Java 而不是搜索序列中的那个。
其他注意事项:
- 在 Windows 10 最新更新上运行
- 指向 OpenJDK 14.0.1 的路径(导致中断)(java -version 在 cmd 中是正确的)
- 我已经确认,在从我的路径中删除 java 之后,工作 exe 仍然通过 jre64 在版本 14.0.1 上运行
- 应用程序是用 Eclipse Workspace/project JRE 构建的,它也指向相同的 OpenJDK 14.0.1
- 在具有类似版本和环境的其他计算机上运行不会导致此问题。