浅谈用java实现事件驱动机制

  

由于项目需求,需要为Java提供一套支持事件驱动机制的类库,可以实现类似于c#中的事件和委托机制。众所周知,爪哇语言本身以及其标准库中并没有提供事件驱动机制的相关接口,虽然摇摆(我且认为其不属于标准库,因为一般没人用:)中存在相关的类支持该机制以实现组件的事件处理,但它毕竟是与GUI相耦合的,而在其它类型的应用程序中使用起来显得就有些别扭,缺乏通用性。因此有必要实现一套通用的Java事件驱动机制类库,然后将其应用于通用的Java应用程序当中,虽然这并不是什么难事:)

  

让我们先考察一下c#的事件驱动机制编写方法C #中提供的事件关键字可以很容易的用来定义一个事件,然后通过向事件中添加事件处理函数(在c#中一般用委托(委托)来引用一个函数),触发事件就可以调用相关的处理函数,也即是事件驱动的过程,例如:

     //定义事件和对应的委托   公共事件MyDelegate点击;   公众委托无效MyDelegate ();//定义委托   空白>/*事件类*/公共事件{//与事件相关的事件处理函数   公共ArrayListcallbackList;//事件触发函数   公共空间释放(){   (回调cb: callbackList) {   cb.run ();   }   }//注册事件处理函数   公共registerCallback(回调cb) {   callbackList.add (cb);   }   }/*事件处理函数类*/公共接口回调{   空运行();   }      公共>/*事件处理类*/公开课EventHandler {//事件源   私有对象发送者;//事件处理函数名称(用于反射)   私人弦调;      公共事件(对象发送方,弦调){   这一点。发送方=发送者;   这一点。回调=回调;   }//事件触发   公共空间释放(){   类senderType=this.sender.getClass ();   尝试{//获取并调用事件源发送方的事件处理函数   方法方法=senderType.getMethod (this.callback);   method.invoke (this.sender);   }捕获异常(e2) {   e2.printStackTrace ();   }   }   }/*事件源*/公共类按钮(){/*可以在此设置按钮类的相关属性,比如名字等*/私人字符串名称;   …//事件处理函数   公共空间>   公开课的EventArgs {//参数   字符串p1;   整数p2;   …      }//onClick事件处理函数改写   公共空间onClick(对象发送方,EventArgs e) {//参数e提供更多的信息   system . out。println(“你好,你点击我!“+ e。p1 + e.p2);   }//触发函数发出改写   公共空间排放(EventArgs e) {   类senderType=this.sender.getClass ();   尝试{//获取并调用事件源发送方的事件处理函数   方法=senderType.getMethod(这个方法。回调,this.getClass (), e.getClass ());   method.invoke(这一点。发送方,这一点。发送方,e);   }捕获异常(e2) {   e2.printStackTrace ();   }   }      之前      

是不是似曾相识?没错,和用c#写Winform窗体时,Visual studio为你自动生成的事件处理函数(代码中的onClick函数)几乎具有完全相同的形式,但此时我们是用Java实现的。

  

当然,除了以上提到的两种方法可以实现Java的事件驱动机制以外,还有一些其它的方法,比如可以利用Java的内部类来实现,笔者也曾写过一些示例代码,这里就不再冗言了,留待以后再讲。

  

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

浅谈用java实现事件驱动机制