我正在对遗留网站进行一些更新和错误修复,其中包含几个页面(html文档),每个页面显示多个Java小程序。不幸的是,我在 OS X 10.9.1 和 Safari 7 上运行时遇到了奇怪的问题。使用 IE , Firefox 或 Chrome 在Windows上无法重现该问题。
加载第一页时,每个applet实例都正确加载,页面看起来不错(好吧,就像使用applet一样好)。当我导航到下一页时,只有大约一半的applet实例被正确加载,当我最终到达第三页时,没有加载applet。如果我在新选项卡中打开每个新页面然后关闭旧选项卡,则applet加载就好了。
通过 Wireshark 查看网络流量,我可以看到Safari在加载页面时从服务器下载了jar文件。
如果我打开了OSX 活动监视器,我可以清楚地看到每个applet实例都被加载到它自己的进程中。导航到新页面时,这些进程不会关闭,而是打开新进程,直到Safari达到每个选项卡的最大插件(或者看起来如此),然后在切换选项卡或Safari关闭之前,不会加载任何其他applet实例。
向destroy()
方法添加调试输出表明在切换页面时没有调用它。
在OS X和Safari上使用applet时这是一个常见问题吗?你是否有任何解决方案,无论好坏,如何实现这一目标并按预期工作?
更新2014-03-04
使用以下applet代码
可以重现该问题import java.applet.Applet;
public class Simple extends Applet {
public Simple() {
System.err.println("!!! SIMPLE()");
}
public void stop() {
System.err.println("!!! STOP()");
}
public void start() {
System.err.println("!!! START()");
}
public void init() {
System.err.println("!!! INIT()");
}
public void destroy() {
System.err.println("!!! DESTROY()");
}
}
在OS X 10.9.1,Safari 7和最新的Java上运行我可以清楚地看到applet已初始化并已启动但从未停止或销毁。