代码之家  ›  专栏  ›  技术社区  ›  Steve

java.lang.Internal错误:在PATH上运行带Java14的EXE4J.exe时,平台编码未初始化

  •  0
  • Steve  · 技术社区  · 4 年前

    所以这个错误很奇怪。。。

    我正在使用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可以让应用程序运行。我的.ex4j配置文件是这样设置的,即应用程序应该寻找一个单独的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,而不是在搜索序列中使用Java。

    其他注意事项:

    • 在Windows 10最新更新上运行
    • 路径指向OpenJDK 14.0.1(导致中断)(java-cmd中的版本正确)
    • 我已经确认,在从我的Path中删除java后,工作exe仍然通过jre64在14.0.1版本上运行
    • 应用程序是用构建的,Eclipse Workspace/项目JRE也指向相同的OpenJDK 14.0.1
    • 在具有类似版本的其他计算机上运行;环境工作与;不会导致这个问题。
    0 回复  |  直到 4 年前
        1
  •  0
  •   Steve    4 年前

    我终于能够确定问题是什么。

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

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

        2
  •  0
  •   Aramis Rodríguez Blanco    2 年前

    在我的例子中,问题是PATH环境变量指向一个jre目录。

    我在不同的目录中有两个应用程序:

    应用程序A PATH环境变量中包含jre目录,并且工作正常。 应用程序B PATH环境变量中未包含另一个jre目录,并抛出此错误。

    从PATH环境变量中删除此jre目录后,一切正常。