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

标签 java applet

我有一个带有 logout" 的小程序按钮。该按钮通过调用 CGI 脚本结束 session ,然后通过调用 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 Plug-in 1.6.0_20<br/> Using JRE version 1.6.0_20-b02 Java HotSpot(TM) Client VM

直接场景如下:
1、登录系统(加载小程序)。
2. 注销(关闭小程序,但浏览器窗口仍然存在)。
3. 点击地址栏并回车。
4. 小程序加载失败,ClassNotFoundException可以在Java Console中看到。
5.刷新页面——服务器重定向到登录页面;登录后,小程序再次不加载并抛出异常。

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

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

我检查过在 Java 控制面板中启用缓存没有帮助。设置 codebase_lookup参数 "false"也没有帮助。它只会阻止尝试加载 "class"直接归档。

提前感谢您的任何建议。

最佳答案

I have an applet that has a "logout" button. The button ends the session by calling a CGI script and then kills Java VM by calling System.exit().

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

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

关于Java 小程序无法在 Internet Explorer 上重新加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5741729/

相关文章:

java - Java Applet 能否最小化其浏览器窗口?

java - Java 是否缓存小程序?

java - 如何使用小程序同时播放音频文件和显示图像?

java - doPrivileged 和 java applet 沙箱

java - 自定义 JOptionPane

java - 从jar中提取exe后出现错误

java.lang.UnsatisfiedLinkError : Couldn't load STLport_shared: findLibrary returned null (tess-two) 错误

java - 如何从不同的(子)目录中提取 java 源文件?

java - Oracle Java 泛型教程 Box 类讲解

Java AWT : Will applet run without main(), init()、start()、paint()