java 自定义事件的触发及监听

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 自定义事件的触发及监听相关的知识,希望对你有一定的参考价值。

我自定义了一个类,并希望这个类在某些条件下能触发属于它自己的一个事件,而这个事件能被任何对这个事件感兴趣的其他类捕获并处理。

这在C#里非常容易做到,就是构造一个Event,在条件达到的时候就用Event名来引发它,再在其他类里注册监听器,但在JAVA里却不知如何实现?

希望知道的人能给我一个模型,最好有相关的代码,非常感谢!

参考技术A JAVA事件响应机制

1,先自定义一个事件

public class MyEvent extends java.util.EventObject
public MyEvent(Object source)

super(source);



2,再自定义一个监听器

public class MyListener implements java.util.EventListener
//这里是当事件发生后的响应过程
public void EventActivated(MyEvent me)

System.out.println("事件已经被触发");



3,以下这个类为触发事件的事件源

public class MyObject
private Vector vectorListeners=new Vector();

public synchronized void addMyListener(MyListener ml)

vectorListeners.addElement(ml);


public synchronized void removeMyListener(MyListener ml)

vectorListeners.removeElement(ml);


protected void activateMyEvent()

Vector tempVector=null;

MyEvent e=new MyEvent(this);

synchronized(this)

tempVector=(Vector)vectorListeners.clone();

for(int i=0;i<tempVector.size();i++)

MyListener ml=(MyListener)tempVector.elementAt(i);
ml.EventActivated(e);





//定义一个公用方法用于触发事件
public void test()

activateMyEvent();



4,测试类

public class Test

public static void main(String[] args)

MyObject mo=new MyObject();

//注册该事件
mo.addMyListener(new MyListener());

//触发该事件
mo.test();

本回答被提问者采纳
参考技术B import java.awt.event.*;
import java.util.*;
interface MyListener

void begin(First first);

class Control implements MyListener

First first;public void newGame(First first)

this.first = first;
first.start();

@Overridepublic void begin(First firstone)

System.out.println("second go on");


class First

private Set<MyListener>listeners = new HashSet<MyListener>();
public void action()

System.out.println("First begin");

private class FirstThread implements Runnable

public void run()

while (true)

action();
for (MyListener sl : listeners)
sl.begin(First.this);

try Thread.sleep(1000);
catch (InterruptedException e)
e.printStackTrace();



public void start()

new Thread(new FirstThread()).start();

public void addMyListener(MyListener ml)

if (ml != null)
listeners.add(ml);



public class TestEvent
public static void main(String args[])

First first = new First();
Control c = new Control();
first.addMyListener(c);
c.newGame(first);


运行结果
First begin
second go on
First begin
second go on
First begin
second go on
First begin
second go on
参考技术C 创建一个监视器喽 参考技术D 其实这东西归咎到底就是一个监听者模式,自己写一个就行了~关于监听者模式网上的资料比较多,自己查查就行了。

以上是关于java 自定义事件的触发及监听的主要内容,如果未能解决你的问题,请参考以下文章

mui.fire()触发自定义事件

观察者模式(自定义事件)

js怎么自定义事件,并能让用on事件监听

父子组件信息传递(子传父)

JS过渡结束监听事件及使用自定义事件解决兼容问题的方法

spring 自定义事件发布及监听(简单实例)