由于我们安装了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发行说明。
我们可以说,没有什么可以导致这种行为。我们注意到有新的Manifest条目(Permissions,Codebase,Application-Name)。这些都被添加了。
查看了Google和stackoverflow。
有些似乎有类似的问题,但我们从未见过解决方案。在许多情况下,人们在下载jar文件和重复下载时遇到问题。这似乎不是我们的问题。
使用过的强硬工具
我们想知道应用程序在上述时间内的作用。所以我们使用了sysinternals和wireshark中的进程资源管理器和进程监视器。我们发现在等待时间内,该过程尝试通过IP与'vip1.g-anycast1.cachefly.net'(205.234.175.175)和93.184.220.29进行通信。后者似乎是一个证书服务器,我真的不明白cachefly是什么东西。在这两种情况下,我们都会看到TCP syn,但没有答案,没有进一步的沟通。这两个地址都是可以ping的。
与IP-stuff无关:我们确定,应用程序没有下载,而是从缓存启动,而且我们的主要在延迟之后被称为,而不是之前。
这就是我们陷入困境的地方
任何进一步的想法如何解决这个问题?我们是唯一遇到这种行为的人吗?
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>
答案 0 :(得分:11)
是的,atulsm的回答是正确的。但请继续阅读:我试图遵循提示,但它看起来不太好,因为在Java控制面板中,条目已被禁用(未设置勾号)。 设置它导致tickmark只是暂时显示(一旦WebStart应用程序被执行并再次终止,设置又回到未选中状态),所以好像设置不正确写入Java的配置文件。
最后:我检查了Deployment Configuration File并在部署属性中手动设置deployment.security.revocation.check=NO_CHECK
。这确实解决了这个问题!
答案 1 :(得分:2)
我遇到过这个问题,原因是默认情况下强制执行证书吊销检查。禁用它(高级选项卡=&gt;执行证书吊销检查“),它应该没问题!
答案 2 :(得分:-1)
在Web Start应用程序中,版本1.8.0_221也会发生这种情况。我已经做到了,发现的问题是每次下载Webstart应用程序时都没有从缓存中加载该应用程序。 这是我在deployment.properties文件中进行的一些更改 我在其中添加了两件事
deployment.security.tls.revocation.check = NO_CHECK deployment.security.revocation.check = NO_CHECK
deployment.security.mixcode = DISABLE
您也可以从configure 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的答案的扩展