在Java程序中实现回调例程

您现在的位置: 电脑爱好者 >> 电脑问答 >> 编程 >> JAVA相关 >> 正文 收藏到QQ书签
    熟悉 MS-Windows 和 X Window System 事件驱动编程模型的开发人员,习惯于传递在某种事件发生时调用(即“回调”)的函数指针。Java 的面向对象模型目前并不支持方法指针,这样似乎就不可能使用这种很好的机制。但我们并不是一点办法都没有!

  Java 的接口支持提供了一种获得回调的等价功能的机制。其技巧就是:定义一个简单接口,并在该接口中声明我们要调用的方法。

  例如,假定我们希望在某个事件发生时得到通知。我们可以定义一个接口:       public interface InterestingEvent
  {
   // 这仅是一个常规方法。因此如果需要,
   // 它可有返回值,也可接收参数。

   public void interestingEvent ();   }

  这使得我们可以控制实现该接口的类的任何对象。因此,我们不必关心任何外部类型信息。与在将 C++ 代码用于 Motif 时使用窗口小部件的数据域来容纳对象指针的难以控制的 C 函数相比,这种方法要好得多。

  发出事件信号的类必须等待实现了 InterestingEvent 接口的对象,并在适当时候调用 interestingEvent() 方法。       public class EventNotifier
  {
   private InterestingEvent ie;
   private boolean somethingHappened;
   public EventNotifier (InterestingEvent event )
  {
   // 保存事件对象以备后用。

  ie = event ;
   // 还没有要报告的事件。

  somethingHappened = false ;
  }
   // ...

   public void doWork ()
  {
   // 检查在别处设置的谓词。

   if (somethingHappened)
  {
   // 通过调用接口的这个方法发出事件信号。

  ie.interestingEvent ();
  }
   // ...

  }
   // ...

  }

  在上例中,我使用 somethingHappened 谓词来跟踪是否应触发事件。在许多情况下,调用此方法足以保证向 interestingEvent() 发出信号。

  希望接收事件通知的代码必须实现 InterestingEvent 接口,并将自身引用传递给事件通知程序。

   public class CallMe implements InterestingEvent
  {
   private EventNotifier en;
   public CallMe ()
  {
   // 创建事件通知程序,并将自身引用传递给它。

  en = new EventNotifier ( this );
  }
   // 为事件定义实际的处理程序。

   public void interestingEvent ()
  {
   // 噢!必定发生了感兴趣的事件!
   // 执行某些操作 ...

  }
   // ...

  } 
· Windows死机及重启问题软件硬件分析汇总
· 实例解析:PHP程序开发中的中文编码问题
· 在Java程序中实现回调例程
· java运行库和JDK、java虚拟机有什么区别!
· 我装jdk-java虚拟机,为什么装到一半就自动退…
· jdk java虚拟机…
· java 的布局方式有什么特点…
· java 的编译问题…
· java线程简单编程
· java 小程序出错 各位大哥,帮 我。…
· java 小程序请教·…
· Java 小程序返回值问题…
· 帮忙编下JAVA 小程序 谢谢了…
· 可以用javac编译,但在用java运行时却显示出…
· 我的javac F:\java\hello.java能执行成功he…
· 键入 javac HelloWorld.java 数秒后回到文件…
· 为什么在CMD中运行javac Hello.java总是显示…
· 配置环境变量后运行javac helloworld.java时…
· javac编译Hello.java时提示无法读取(环境变…
· Java和ASP.NET的优劣
· JAVA和asp.net哪个更好?各有什么优势和特点…
· 请问学习java和asp.net那个比较好一点。。
· 有java和asp.net的基础在学delphi难不难?
· 使用java写一个方法实现统计一条英文语句忠…
· java的类在那里?
· java中的一个常见问题?帮帮忙呀!!
· microSD 这个是什么,天语手机有这个有什么…
· java 俄罗斯方块问题,高手帮忙看看!!!!…
· JAVA编程题!
· Sun Java控制台是什么东西来的?…
· 求JAVA游戏和JAVA是生产器下载和教程
· asp.net讲课为什么先讲C#,java不行吗
· JAVA中编译时出现的,以前都没有,麻烦看下是…
· JAVA的编译问题
· 关于JAVA的编译的MAIN问题?
· 在java中,编译一个源文件时总提示找不到包,…
· java 的编译问题…
· 关于java中的方法 构造方法 重载方法等 谁给…
· 关于JAVA中JFrame的一个问题
· 急啊!求一段关于java 的快速排序的代码…
· 关于JAVA中length的用法希望大家告诉我下,我…
· 手机支持JAVA是什么意思?
· java读取文件内容并计算后格式输出!
· 如何从不了解java到学会java
· 我是JAVA初学者 想学好它该看什么书?…
· 使用过Java做过网站人,请教大家一问题
· java 找不到符号…
· java jdk1.6.0如何配置环境…
· 刚学完JAVA的J2SE,请问要学J2EE要先学什么呢…
· 用javac编译Hello.java时提示无法读取(环境…
  电脑常识        显示设备        优秀站点
· 新买的siemens Gigaset A370 数字无绳电话 液晶屏幕上会显示:“…
· 我要买长城Z96显示器 大家给点意见…
· 主显示器驱动程序
· 哪些液晶显示器看电视
· 屏幕刷新率为什么只有60
· 显卡难得一见的问题求教!!
· 我家买的长虹电视不知道为什么屏幕变小了(不是调节问题)而且很…
· 关于电脑显示屏的问题
· 显示器不断重启
· 主板865G-M8能加128MB的显卡吗
· 为什么开音乐盒的时候显示器会黑屏
· 集成显卡Intel (R) 82845G/GL/GE/PE/GV Graphics Controlle玩实况…
· 无驱摄像头黑屏!
· 请问装显示器的纸箱哪有卖
· 我的显卡是NVIDA GeForce MX 440能否用宽屏液晶…
· 屏幕分辨率的问题
· 我的电脑显示器的屏幕分辨率好暗,如果调到800X600后就亮了,这是…
· 刚买回来的电脑连接显示器漆黑一片
· 89A万用表LCD在哪里可以买到
· 请教尾行3高手 怎样在H时可以变强 我玩起来怎么每次都是弱呀 请教…
  硬件      互联网     工具软件     其他应用软件
· 显示器出现水波纹
· 电脑开机风扇转一下就停不能开机,多启动几次又正常
· 声卡声卡
· 现在的AMDx2 5000+属于AMD2940系列的处理器么?…
· 这个的电脑配置要1800谁相信呀,
· 想买张显卡 价格在500元左右的…
· 我想换一个中等的主板和显卡 大约需要多少钱…
· 电脑密码和硬盘
· 为什么迅雷总在慢慢的吃掉我的内存?
· 显卡驱动一安装,就启动不了,蓝苹,但。。
· 电脑 配置 学习 cpu 内存 显卡…
· 我在2009年要玩模拟人生全套加物品包需要怎样的电脑配置??
· CPU温度 2.4C…
· 我的MP3插到USB接口上,只是闪了一下,就进入了充电状态.
· 启动 黑屏…
· 新装的电脑无法开机运行
· 配置的问题!
· win98第二版的驱动(我的主板是昂达N61GT)
· 有keil里面C51FPS.LIB 文件的请帮帮忙!!!!…
· 怎么才知道金士顿内存条属于DDR或DDR2
  病毒木马     数据库     多媒体     IT公司
· 进行网上支付时,里面说的“支付卡号为银行卡号前6位加上个人网银…
· 压缩的文件
· 电脑C盘里容量是14GB.可用空间是1GB.怎么半呢?
· 飞鸽传书2007绿色版传送速度是多少?
· 系统还原会还原所有的分区吗?
· svchoet.exe应用程序错误 内存不能written…
· 系统提示硬件加速Direct3D不可用 这是这么了…
· 电脑开机后就黑屏只有鼠标能动.重装后可以开机,但正常两天后又打…
· PC机直接装Ubuntu 7.04,内存至少要多少,不用虚拟机的那种设置?…
· 我的电脑是宏基4710zg,使用vista,开机特别慢……
· nvidia geforce6200 turbocache的显卡驱动…
· 系统更新IE失败 怎么样能再次更新…
· 电脑蓝屏了怎么回事
· 如何自动更新IE7
· 自动更新安装IE7时候我当时选择了取消安装现在怎么样能重新安装
· internert explorer7关闭的时候特别慢 请问是什么原因?…
· 刚买了一个i450发现名片夹里有22个人的信息,这个机器是否被其他…
· 卡巴斯基2009版全功能软件检测出威胁怎么清除
· 灰鸽子中主机上线是什么意思?
· 瑞星关闭对某程序的监控
  操作系统        资源共享        笔记本电脑
· 我想知道2M电信宽带 能带动3台机子玩劲舞或者别的游戏吗?…
· 网通2M宽带3台电脑共用网速慢吗?晚上7点至10点,,,,,会不会很卡??…
· 我安装了LAN,家里3台电脑能同时上网么?
· 在不需要交换器或者集线器的情况下,如何组建一个3台机子的局域网…
· 我们寝室3台电脑,一条线,一个猫,一个交换器,怎样设置才能让3台电…
· 3台计算机,每个机子都有网卡,使用一个交换器上网,请问如何建立…
· 请问如何建立局域网5
· 两台不能上网的电脑如何建立局域网
· 如何建立局域网资源共享
· 想把资源共享到因特网,校内这台计算机做临时服务器,该如何设置…
· 如何资源共享?
· 无论距离远近,两电脑间都可以实现资源共享吗?
· 并发进程在访问共享资源时,不可能出现与时间有关的错误”对吗?
· 网上共享的资源有硬件,软件,文件对吗?
· 资源共享可分为软件、硬件和数据资源对吗?
· 笔记本电脑长时间不用,电池的电量是充满呢,还是放空啊?
· 笔记本电脑在多少度下不易长时间运行?
· 笔记本一边充电一边用就会死机是怎么回事?
· 笔记本电脑安装了摄像头怎么老死机啊
· 笔记本电脑经常死机是怎么回事
  编程 汇编语言 C VB VC C#.NET 其他语言 JAVA相关
· vb.net中使用GetPrivateProfileString访问INI文件
· struts框架基础指导?
· 如何正确理解PHP程序错误信息的表示含义
· 老牌经典编程语言PHP的优缺点
· JForum 的 SSO集成的问题解决方法…
· 新手学堂 PHP服务器变量设置的方法介绍…
· Windows死机及重启问题软件硬件分析汇总
· 实例解析:PHP程序开发中的中文编码问题
· 在Java程序中实现回调例程
· 用Rational设计和实现简单的电话簿程序
· C#中正则表达式进行忽略大小写的字符串替换
· F#成为Visual Studio的上等公民…
· java运行库和JDK、java虚拟机有什么区别!
· 我装jdk-java虚拟机,为什么装到一半就自动退出呢
· jdk java虚拟机…
· java 的布局方式有什么特点…
· java 的编译问题…
· java线程简单编程
· java 小程序出错 各位大哥,帮 我。…
· java 小程序请教·…
网站简介 | 网站地图 | 网站导航 | 友情链接 | 广告业务 | 联系我们
电脑爱好者版权所有Copyright © 2005-2008 www.cfan.net.cn All rights reserved. 冀ICP备06001745号
电脑爱好者 www.cfan.net.cn
电脑爱好者
友情链接: