18

自从我们安装了 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 发行说明。

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

看了遍谷歌和stackoverflow。

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

使用坚硬的工具

我们想知道该应用程序在上述时间段内做了什么。所以我们使用了来自 sysinternals 和 wireshark 的进程浏览器和进程监视器。我们发现,在等待期间,进程尝试通过 IP 与“vip1.g-anycast1.cachefly.net”(205.234.175.175)和 ​​93.184.220.29 进行通信。后者似乎是一个证书服务器,我真的不明白那个 cachefly 是什么。在这两种情况下,我们都会看到 TCP 同步,但没有应答,没有进一步的通信。两个地址都可以 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>
4

3 回答 3

13

Yes, atulsm's answer gave the right kick. But read on: I tried to follow the hint, but it did not look good since in the Java Control Panel the entry already was disabled (the tick was not set). Setting it resulted in the tickmark being only shown temporarily (as soon as a the WebStart application was executed and terminated again, the setting went back to not selected), so it seems as if the setting is not properly written into Java's config file.

FINALLY: I checked the Deployment Configuration File and set deployment.security.revocation.check=NO_CHECK manually in the deployment properties. That did solve the problem!

于 2013-10-21T08:07:44.560 回答
3

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

于 2013-10-21T05:45:12.310 回答
1

这发生在版本 1.8.0_221 以及 web start 应用程序中。我已经完成了,我发现的问题是每次下载 webstart 应用程序并且没有从缓存中加载。这是我在 deployment.properties 文件中所做的一些更改,我在其中添加了这两件事

deployment.security.tls.revocation.check=NO_​​CHECK deployment.security.revocation.check=NO_​​CHECK
deployment.security.mixcode=DISABLE

您也可以从配置 java gui 工具更改这些设置 在 jnlp 文件中我更改了这两件事 1. 将更新检查设置从始终更改为后台 2. 将堆大小分别从 128 和 256 增加

<update check="background"/>
<j2se version="1.8+" initial-heap-size="256m" max-heap-size="512m"/>

然后我转到命令提示符并输入这些

javaws -import -system -shortcut jnlp.jnlp
javaws -system -Xnosplash -wait jnlp.jnlp

第一个命令将 jnlp 导入系统缓存,第二个命令强制 jnlp 从系统缓存运行,而不是从应用程序运行,或者先下载它。

为了安全起见,首先运行此命令以从缓存中清除未安装的应用程序

javaws -clearcache

这大大缩短了时间,但打开应用程序仍然需要 4 分钟。但在此之前,它需要超过 15 个,所以这是一个很大的改进。这是对 Micheal B 的回答的扩展

于 2019-08-21T06:18:17.083 回答