java 自定义事件的触发及监听
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 自定义事件的触发及监听相关的知识,希望对你有一定的参考价值。
我自定义了一个类,并希望这个类在某些条件下能触发属于它自己的一个事件,而这个事件能被任何对这个事件感兴趣的其他类捕获并处理。
这在C#里非常容易做到,就是构造一个Event,在条件达到的时候就用Event名来引发它,再在其他类里注册监听器,但在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 自定义事件的触发及监听的主要内容,如果未能解决你的问题,请参考以下文章