Java小程序无法在Internet Explorer上重新加载

Java小程序无法在Internet Explorer上重新加载,java,applet,Java,Applet,我有一个小程序,它有一个注销“按钮。该按钮通过调用CGI脚本结束会话,然后通过调用System.exit()杀死Java VM。问题是当用户尝试在同一浏览器窗口中再次登录时-小程序无法加载ClassNotFoundException: load: class lucent/fm/parts/BlankPage.class not found. java.lang.ClassNotFoundException: lucent.fm.parts.BlankPage.class at sun.plug

我有一个小程序,它有一个
注销“
按钮。该按钮通过调用CGI脚本结束会话,然后通过调用
System.exit()
杀死Java VM。问题是当用户尝试在同一浏览器窗口中再次登录时-小程序无法加载
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插件1.6.0\u 20
使用JRE版本1.6.0_20-b02 Java HotSpot(TM)客户端虚拟机

直接场景如下所示:
1.登录系统(加载小程序)。
2.注销(关闭小程序,但浏览器窗口仍然存在)。
3.单击地址栏并按Enter键。
4.小程序加载失败,可以在Java控制台中看到
ClassNotFoundException

5.刷新页面-服务器重定向到登录页面;登录后,小程序再次不加载并引发异常

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

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

我检查了Java控制面板中是否启用缓存没有帮助。将
codebase\u lookup
参数设置为
“false”
也没有帮助。它只会阻止尝试直接加载
“class”
文件


提前感谢您的建议。

如果您的带有小程序的html不是静态的(cgi、php等),那么在注销后,您可以尝试强制不同的URL指向jar文件(即使用“my.jar?random=1235232”而不是“my.jar”)

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

另一个潜在的解决方法是重新配置apache,以便始终为JAR服务——即使会话已关闭(如果可以接受的话)

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

调用
System.exit(anyNumber)
的小程序大致相当于客人烧毁了主人的房子。小程序(即使是受信任的小程序)应该永远不要尝试结束虚拟机。当共享虚拟机的页面中的所有小程序都完成了
销毁()
方法和浏览器选择的后续时间段


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

您的错误看起来像是有什么东西试图加载名为
lucent.fm.parts.BlankPage.class的类,这是一个非法的类名(我想应该是
lucent.fm.parts.BlankPage
)。问题是,为什么你的浏览器/插件尝试加载这个类?因为HTML页面:;我可以将它改为BlankPage而不是BlankPage.class,但它没有帮助。根据官方文档,类名应该是“.class”后缀:据我所知,在Sun推出“下一代Java插件”之前,在调用System.exit时关闭浏览器是一种正常行为@pkalinow:谢谢你提供的更多信息。在我尝试过之后,我决定不再尝试。我很高兴新的插件拒绝了这个请求。浏览器有一个功能完善的
X
按钮来关闭它们(或者你的操作系统/浏览器上的任何东西),它们不需要小程序的帮助。
x
按钮的问题是它不会关闭当前会话中的所有窗口,也不会删除会话cookie。我必须满足这两个要求。从小程序
destroy()执行此操作
方法。如果需要按钮退出小程序
,请重定向到“感谢使用我们的小程序”页面。
destroy()
方法应被称为浏览器/JRE组合。顺便说一句-我很惊讶浏览器崩溃会删除cookie。@安德鲁·汤普森:我需要关闭当前会话中的所有小程序,而不仅仅是已单击的小程序。关于cookie-关闭浏览器后,会话cookie将被销毁。