快速业务通道

实现applet跨框架和浏览器窗口彼此通信 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20
debase 相同,则即使它们是在不同的浏览器窗口中被加载的,它们也共享同一个运行时环境。粗略地说,codebase 就是从中加载 applet 的那个目录。请参阅文后的java//jw-tips/tip101/index.shtml#resources">参考资源,其中有一个链接指向有关 codebase 的一篇教程。

由于运行时环境是共享的,因此所有 applet 实例都可以访问静态域和静态结构,这样这些静态域和结构就可用来在不同 applet 之间传递信息。

applet 不仅可以存储诸如整数、字符和字符串这样的简单数据类型,而且每个 applet 都可以将其自身(实例)的一个引用存储在一个静态域(可能在它自己的类中)中。任何 applet 都可以访问这个域,从而获得指向这个实例的引用。

这听起来复杂吗?不,一点也不复杂。我首先举一个简单的例子。假定您的一个 applet (AppletA.class) 在一个框架中,而另一个 applet (AppletB.class) 在另一个框架中,而且这两个 applet 都是从同一个 codebase 加载的。

您现在希望授予 AppletA 访问 AppletB 的公用方法的权限。您必须让 AppletB 将其自身的一个引用存储在一个静态公用域中,就像下面这样:

  public class AppletB {     public static AppletB selfRef = null; // 初始归零     public void init() {       // 生成对该实例的引用       selfRef = this;     }     ...   }

现在您就可以从 AppletA 访问 AppletB 的实例了:

  public class AppletA {     AppletB theOtherApplet = null;     public void callAppletB() {       // 获取静态域,其中存储着指向 AppletB 的       // 实例的指针。       theOtherApplet = AppletB.selfRef;       // 此后就可以调用实例方法了,       // 如下所示...       theOtherApplet.repaint();     }     ...   }

这就是我们所要做的全部工作。因为运行时环境是由不同的 applet 共享的,所以即便 applet 不在同一个页面上,这个方法同样奏效。

值得注意的一点是,上面的代码并没有处理在启动 AppletB 之前就调用 AppletA 中的 callAppletB 方法的情况。如果发生这种情况,则 selfRef 将是 null,这样不能进行任何通信。

一种更通用的方法

当然,还有一种更通用的方法。您可以创建这样一个类,创建它的唯一目的就是在静态数据结构中存储 applet 的引用。稍后您将看到的 AppletList 类就属于这种情况。希望其他 applet 访问自己的公用方法的 applet 实例通过 AppletList 将自己注册。按照 AppletContext.getApplet(string name) 中的模式,每个注册项都与一个字符串相关联。当一个 applet 调用某个 applet 的引用时,这个字符串就起关键字的作用。

通常,applet 是按下面的方式注册的:

  public class AppletA {     public void start() {       AppletList.register("Stock-trade-applet", this);       ...     }   }

另一个 applet 获取对它的访问权:

  public class AppletB {     public void run() {       AppletA tradeApplet =         (AppletA) AppletList.getApplet("Stock-trade-applet");       ...     }   }

当该 applet 停止运行时,您必须紧记在 AppletList 中撤销注册:

  public void stop() {     AppletList.remove("Stock-trade-applet");     ...   }

实现applet跨框架和浏览器窗口彼此通信(3)

时间:2011-01-22 Tobias Hill

AppletList 类的完整源代码如下所示:

0: import java.util.*; 1: import java.applet.Applet; 2: 3: public c

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号