繁体   English   中英

Java applet无法在Internet Explorer上重新加载

[英]Java applet fails to reload on Internet Explorer

我有一个具有logout"按钮的applet。该按钮通过调用CGI脚本结束会话,然后通过调用System.exit()杀死Java VM。问题是当用户尝试在同一浏览器窗口中再次登录时- applet无法使用ClassNotFoundException加载:

load: class lucent/fm/parts/BlankPage.class not found.
java.lang.ClassNotFoundException: lucent.fm.parts.BlankPage.class
at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Unknown Source)
at sun.plugin2.applet.Plugin2Manager.createApplet(Unknown Source)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.io.IOException: open HTTP connection failed:http://example.com/html/lucent/fm/parts/BlankPage/class.class
at sun.plugin2.applet.Applet2ClassLoader.getBytes(Unknown Source)
at sun.plugin2.applet.Applet2ClassLoader.access$000(Unknown Source)
at sun.plugin2.applet.Applet2ClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
... 7 more
Exception: java.lang.ClassNotFoundException: lucent.fm.parts.BlankPage.class 

它仅出现在Internet Explorer上,而不是Firefox中。 Java插件是:
Java Plug-in 1.6.0_20
Using JRE version 1.6.0_20-b02 Java HotSpot(TM) Client VM

直接方案如下
1.登录系统(加载小程序)。
2.注销(它关闭applet,但浏览器窗口仍然存在)。
3.单击地址栏,然后按Enter键。
4.无法加载applet,可以在Java控制台中看到ClassNotFoundException
5.刷新页面 - 服务器重定向到登录页面; 登录后,applet再次加载并抛出异常。

查看Apache访问日志证明,在步骤4中,浏览器(或插件)尝试加载jar文件并获取HTTP错误。 没关系因为会话已经过期了。 奇怪的事情发生在第5点 - 没有罐子的要求! 似乎浏览器或插件记住失败的尝试,甚至没有尝试加载jar文件。 它只尝试加载原始.class文件,该文件在服务器上不存在。

我的结论是否正确? 我该如何处理这样的错误? 是否有可能强制Java插件加载jar文件?

我检查了在Java控制面板中启用缓存没有帮助。 codebase_lookup参数设置为"false"也没有用。 它只能防止尝试直接加载"class"文件。

在此先感谢您的任何建议。

我有一个具有“注销”按钮的小程序。 该按钮通过调用CGI脚本结束会话,然后通过调用System.exit()来终止Java VM。

调用System.exit(anyNumber)的applet粗略地等同于烧毁其主机房屋的客户。 Applets(甚至是受信任的applet) 永远不应该尝试结束VM。 当共享VM的页面中的所有applet完成其destroy()方法以及浏览器选择的后续时间段时,VM将由浏览器结束。

BTW - 我记得一个版本的Mozilla / FF,其中调用System.exit(int)不仅结束了VM,还崩溃了浏览器!

如果您的applet的html不是静态的(cgi,php等),那么在注销后,您可以尝试强制指向jar文件的不同URL(即代替“my.jar”使用“my.jar?random = 1235232" )。

此外,您可以尝试使用缓存HTTP标头。

另一个潜在的解决方法是重新配置apache以便始终为jar提供服务 - 即使会话已经关闭(如果这是可以接受的)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM