1

所以这个错误是一个奇怪的错误......

我正在使用 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
  • 在具有类似版本和环境的其他计算机上运行不会导致此问题。
4

1 回答 1

0

我终于能够确定问题所在。

我使用的是与 Java 10+ 版本不兼容的 Exe4J 6.0。我很惊讶在尝试运行 exe4j 来编译我的可执行文件时我没有得到彻底的错误,但是似乎 exe4j 从我的注册表中吸取了一个较旧的 1.8 java 版本,并使用了一个我从未清理过的 1.8 jdk 我的“ C:/程序文件/Java”文件夹。当我删除所有旧 JDK 时,exe4j 开始抱怨缺少 Java VM(即使在路径上设置了 14.0.1)。

升级到 Exe4J 7.0 为我解决了这个问题。

于 2020-07-20T21:34:16.080 回答