文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Applet间的通讯方法是什么

2023-06-03 03:49

关注

本篇内容主要讲解“Applet间的通讯方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Applet间的通讯方法是什么”吧!

Applet间的通讯(2)

相互查找

  使用静态变量进行通讯并不意味着applet就可以同时被初始化。不同的实例还是先后启动的,我们并不能保证它们的启动次序。然而,有一点我们可以确定:在第一个ColorRelay applet实例被创建之前,类ColorRelay已经初始化了,因此,当所有applet实例启动时,它们都将获得类的静态变量。

  但是,当你使用静态变量时必须小心,因为多个实例可能同时访问静态变量。为了解决这个问题,我使用了两个同步方法(synchronized methods)从链表中增减applet实例。因为它们是synchronized static方法,当它们运行时,ColorRelay 类会被索住,以避免并发访问。清单1.3是这两个方法的代码。值得注意的是,当第一个元素被加到链表之后,主控线程(controller thread)将启动。我们随后会看到当最后一个元素从链表中被移出后,这个线程将自动停止。


清单 1.3. ColorRelay.java (part 2).
 
 static synchronized void addToList(ColorRelay elem) {
 if (list == null) {
 list = listTail = elem;
 elem.next = elem.prev = null;

 // Because the list has elements now, we should start the thread.
 relayer = new Thread(new ColorRelay());
 relayer.start();
 }
 else {
 elem.prev = listTail;
 listTail.next = listTail = elem;
 elem.next = null;
 }
 }

 
 static synchronized void removeFromList(ColorRelay elem) {
 ColorRelay curr = list;
 while (curr != null && curr != elem) {
 curr = curr.next;
 }

 if (curr == elem) {  // We found it!
 if (list == curr) {
 list = curr.next;
 }
 if (listTail == curr) {
 listTail = curr.prev;
 }
 if (curr.next != null) {
 curr.next.prev = curr.prev;
 }
 if (curr.prev != null) {
 curr.prev.next = curr.next;
 }
 curr.next = curr.prev = null;
 }
 // If curr is null, then the element is not on the list
 // at all. We could treat that as an error, but I'm
 // choosing to report success.

 return;
 }

初始化共享数据

  Applet被创建之后init方法被调用,这个方法检查、转换和存储applet的参数。对image参数需要额外的注意,因为它是存储在另一个静态变量中的。在试图访问originalImage静态变量之前,要锁住ColorRelay类,我们没有使用synchronized 方法,而是使用一段synchronized 监测语句来实现这个目的。(事实上,应该只有一个ColorRelay实例获得image参数,但为了防止HTML中的编码错误,我们采取了上述的预防措施)。清单1.4是init的代码。


清单 1.4. ColorRelay.java (part 3).
 
 public void init() {
 String flash = getParameter("flashColor");
 if (flash != null) {
 try {
 flashColor = new Color(parseRGB(flash));
 }
 catch (NumberFormatException e) {
 // Ignore a bad parameter and just go with the default.
 }
 }

 String sleep = getParameter("sleepTime");
 if (sleep != null) {
 try {
 sleepSecs = Integer.parseInt(sleep);
 }
 catch (NumberFormatException e) {
 // Ignore a bad parameter and just go with the default.
 }
 }
 
 String imageURL = getParameter("image");
 if (imageURL != null) {
 Class cr = Class.forName("COM.MCP.Samsnet.tjg.ColorRelay");
 synchronized (cr) {
 if (originalImage == null) {
 originalImage = getImage(getDocumentBase(), imageURL);
 }
 }
 }

 tracker = new MediaTracker(this);
 }

Working Together

  当浏览器准备执行applet时,start 方法被调用,将applet加入链表。在stop方法中,applet被译出链表。在前面的代码中你已经看到,第一个链表元素的添加将导致控制线程的启动。这个控制线程仅仅是循环读取链表元素,一次将链表中的某个元素点亮(显示彩色图片)。至于显示的持续时间,是由applet自己决定的。如果链表中没有元素了,控制线程自动终止。清单1.5是控制线程的strat、stop以及run方法。


清单 1.5. ColorRelay.java (part 4).
 
 public void start() {
 // Ordinarily, we want to display the original image.
 image = originalImage;

 ColorRelay.addToList(this); // Let's get to work!
 }

 
 public void stop() {
 ColorRelay.removeFromList(this);
 }

 
 public void run () {
 ColorRelay curr;

 // Continue running through the list until it's empty ...
 while (list != null) {
 for (curr = list; curr != null; curr = curr.next) {
 try {
 curr.flash();
 }
 catch (InterruptedException e) {
 }
 }
 } 
 }

到此,相信大家对“Applet间的通讯方法是什么”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯