gpt4 book ai didi

Java Web Start 应用程序在 jre8u40 而不是 jre8u51 下运行

转载 作者:搜寻专家 更新时间:2023-11-01 03:49:50 24 4
gpt4 key购买 nike

我们有一个使用 javaws 的 Java 网络应用程序。它在 Java 8 update 40 下运行良好,但在 Java 8 update 51 下,jp2launcher.exe 只是停止,没有启动应用程序。

我在 C:\Users\me\AppData\LocalLow\Sun\Java\Deployment\log 中找到了日志,但它们在 j8u40 和 j8u51 之间是相同的(当然除了加载 jar 的顺序,jre 版本和发布时间)。

对于两个 jre 版本,我都使用 Process Monitor 记录了启动。在 j8u51 下,jp2launcher.exe 以结果“SUCCESS”退出。比较两个 procmon 日志,我无法找出任何异常。他们都翻遍了 C:\Users\me\AppData\LocalLow\Sun\Java\Deployment 目录和它们各自的 C:\Program Files\Java\jre1.8.0_XX\lib 目录等等,但是 j8u51 只是退出。

Windows 事件日志不显示任何与 Java 相关的内容。

我可以在其他任何地方查找诊断信息吗?关于这里可能出现的问题有什么建议吗?

更新:我已经成功运行了 jnlp set "JAVAWS_VM_ARGS=-Xcheck:jni -XX:-TraceClassLoadingPreorder -XX:+PrintCommandLineFlags -verbose:jni -verbose:class -verbose:gc -XX:+ PrintGCDetails -Djava.util.logging.config.file=C:\misc\logging.properties" 并记录标准输出/标准错误。看起来 javaws 和 jp2launcher 记录到输出,然后 jre8u40 和 jre8u51 版本都终止。据推测,在 j8u40 版本中,它正在启动另一个 jp2launcher.exe 来运行该应用程序。

比较两个输出日志没有任何意义。这些类以几乎相同的顺序加载,除了一些差异之外,大部分是相同的类,这些差异很容易通过使用更新的类来解释。

进一步更新:我已经能够使用 java.exe 直接启动应用程序,方法是从服务器安装中获取客户端文件并解压缩它们。应用程序本身在 jre8u51 下运行良好,所以问题肯定出在 javaws 本身。

update3:清除缓存并不能解决问题。该问题出现在不同的机器上,即使是全新安装的 Java。

更新 4:作为实验,我刚刚在 Ubuntu Linux 下尝试过。我们的产品在技术上不支持 Linux,但我还是想试试。碰巧的是,行为是相同的!在 jre8u40 下,应用启动,而在 jre8u51 下,它不启动!

5:原来u45下也有这个问题,就是u40之后的update。所以,原因似乎是在 u45 中发生了变化,而不是在 u51 中发生了变化。

最佳答案

知道了!

这里有一些交互元素:

  • jnlp 包含一个用于 Java 6 和 Java 7 的 j2se 元素。在 Java 8 上运行时,它似乎使用了 Java 6 条目。
  • Java 6 条目指定了 VM 参数,而 Java 7 则没有。
  • 经过反复试验,我确定 -XX:+CMSIncrementalMode VM 参数是导致它失败的原因。我不知道这个 arg 的作用,但显然 JRE8u45+ 不喜欢它。
  • 我下载并修改了 jnlp 来测试上面的内容。为了让 javaws 实际使用我的更改,我必须删除根 jnlp 元素的 href 属性。否则,javaws 会忽略我的更改并使用服务器上的 jnlp 副本。

我目前的假设是 JRE8u45+ 有一个错误,它使用了错误版本的 VM 参数。

我刚刚测试了一个包含 1.6、1.7 和 1.8 条目的自定义 jnlp,其中 1.6 有 vm args 而 1.7 和 1.8 没有。

  • Javaws 不会提示“应用程序想要使用 Java 7,但您应该使用系统上的最新版本,这样可以吗?”。因此,此时已识别出其中有一个 1.8 条目。
  • 但是,它无法启动该应用程序。因此,在那一点上,它一定对它在哪个 jnlp 元素上感到困惑。

因此,看起来解决方法是从服务器端的 jnlp 中删除 -XX:+CMSIncrementalMode VM arg。

关于Java Web Start 应用程序在 jre8u40 而不是 jre8u51 下运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31556273/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com