自 Java 1.7.0u40 起的 Java WebStart 应用程序的启动延迟较长

2022-09-02 22:02:51

自从我们安装了Java 1.7.0u45以来,我们的WebStart应用程序在Windows系统上的启动时显示出严重的延迟(我们还没有尝试过其他平台)。

症状是双击桌面上的应用程序图标后,初始屏幕会快速显示,停留一段时间(像以前一样)并关闭。在此之后,我们有大约1分钟的延迟。然后,最后,应用程序窗口打开,一切都像超级按钮一样工作。

我们的应用程序在Java 1.7.0u25之前没有问题。Java 1.7.0u40是第一个出现问题的版本。

我们的应用程序是从单个(可执行的)jar文件构造的。最活跃的部分是 jar 内部一些用于串行端口访问的本机类。我在这篇文章的末尾添加了jnlp文件。

我们试图找出延迟的原因可能是什么:

已在 http://docs.oracle.com/javase/7/docs/technotes/guides/jweb/enhancements-7.html 查看 Java WebStart 发行说明以了解我们的版本。

就我们所能说的,没有什么可以导致这种行为。我们注意到有新的清单条目(权限,代码库,应用程序名称)。这些是添加的。

看了整个谷歌和堆栈溢出。

有些人似乎有类似的问题,但我们从未见过解决方案。在许多情况下,人们在下载jar文件和重复下载时遇到问题。这似乎不是我们的问题。

使用坚固耐用的工具

我们想知道该应用程序在上述一分钟内做了什么。因此,我们使用了来自系统内部和 wireshark 的流程浏览器和流程监视器。我们发现,在等待时间内,进程尝试通过IP与“vip1.g-anycast1.cachefly.net”(205.234.175.175)和93.184.220.29进行通信。后者似乎是一个证书服务器,我并没有真正理解那个缓存的东西是什么。在这两种情况下,我们都看到TCP syn,但没有答案,没有进一步的通信。两种地址都是可 ping 的。

与IP无关:我们确信,应用程序不是下载的,而是从缓存开始的,并且我们的main是在延迟之后而不是之前调用的。

这就是我们陷入困境的地方

任何进一步的想法如何解决这个问题?我们是唯一经历过这种行为的人吗?

Jnlp(请注意,网址是手动返工的):

<?xml version="1.0" encoding="UTF-8"?>
<jnlp  spec="6.0+" codebase="http://53.48.16.33:8180/jenkins/job/TcuTerm%20-%20Deploy/lastSuccessfulBuild/artifact/5000_Construction/5100_Code_Base/TcuTerm/antlocal" >
    <information>
      <title>TcuTerm</title>
      <vendor>Development</vendor>
      <icon                 href="http://53.48.16.33:8180/jenkins/job/TcuTerm%20-%20Deploy/lastSuccessfulBuild/artifact/5000_Construction/5100_Code_Base/TcuTerm/src/com/x/tcu/app/term/resources/tcu.jpg"/>
      <icon kind="shortcut" href="http://53.48.16.33:8180/jenkins/job/TcuTerm%20-%20Deploy/lastSuccessfulBuild/artifact/5000_Construction/5100_Code_Base/TcuTerm/src/com/x/tcu/app/term/resources/tcu.jpg"/>
      <icon kind="splash"   href="http://53.48.16.33:8180/jenkins/job/TcuTerm%20-%20Deploy/lastSuccessfulBuild/artifact/5000_Construction/5100_Code_Base/TcuTerm/src/com/x/tcu/app/term/resources/splash.jpg"/>
      <homepage href="https://confluence.detss.corpintra.net/display/TCU/TcuTerm"/>
      <offline-allowed/>
      <shortcut>
        <desktop/>
        <menu submenu="TcuTerm"/>
      </shortcut>
    </information>
    <security>
      <all-permissions/>
    </security>
    <resources>
      <j2se version="1.6+" href="http://java.sun.com/products/autodl/j2se"/>
      <jar href="TcuTerm.jar" main="true"/>
    </resources>
    <application-desc main-class="com.x.tcu.app.term.TcuTerminal"/>
    <update check="timeout"/>
 </jnlp>

答案 1

是的,阿图斯姆的回答给了正确的一脚。但请继续阅读:我试图遵循提示,但它看起来并不好,因为在Java控制面板中,该条目已被禁用(未设置勾号)。设置它导致刻度线只是暂时显示(一旦WebStart应用程序被执行并再次终止,该设置就会返回到未选中状态),因此似乎该设置未正确写入Java的配置文件中。

最后:我检查了部署配置文件,并在部署属性中手动设置了 deployment.security.revocation.check=NO_CHECK。这确实解决了问题!


答案 2

我遇到过这个问题,这是因为默认情况下强制执行证书吊销检查。禁用它(高级选项卡 = >执行证书吊销检查“),它应该没问题!


推荐