java的响应机制_JAVA事件响应机制
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
{
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();
}
}
观察者模式-Java自定义事件
import
java.util.EventObject;
/**
* Title: 事件处理类,继承了事件基类
* Description:
* Copyright: Copyright (c) 2005 Company:
* cuijiang
*
*
@author not attributable
*
@version 1.0
*/
public
class
DemoEventextends
EventObject {
private Object obj;
private
String sName;
public
DemoEvent(Object source, String sName) {
super(source);
obj = source;
this.sName = sName;
}
public
Object getSource() {
return obj;
}
public
void
say() {
System.out.println("这个是 say 方法...");
}
public
String getName() {
return sName;
}
}
package
com.te.event.other;
import
java.util.EventListener;
/**
* Title: 监听器接口
* Description:
* Copyright: Copyright (c) 2005
* Company: cuijiang
*
@author not attributable
*
@version 1.0
*/
public
interface
DemoListenerextends
EventListener{
public
void demoEvent(DemoEvent dm);
}
package
com.te.event.other;
import
java.util.
*
;
/**
* Title: 使用事件的类
* Description: 该类实现了监听器的添加和监听器方法的执行,并且实现了由于属性的改变而执行事件
* Description: 在添加、删除、执行监听器的时候都要注意同步问题
* Copyright: Copyright (c) 2005
* Company: cuijiang
*
@author not attributable
*
@version 1.0
*/
public
class
DemoSource {
private Vector repository =
new Vector();
private
DemoListener dl;
private
String sName
=
""
;
public
DemoSource() {
}
//
注册监听器,如果这里没有使用Vector而是使用ArrayList那么要注意同步问题
public
void addDemoListener(DemoListener dl) {
repository.addElement(dl);
//
这步要注意同步问题
}
//
如果这里没有使用Vector而是使用ArrayList那么要注意同步问题
public
void notifyDemoEvent(DemoEvent event) {
Enumeration enu = repository.elements();
//
这步要注意同步问题
while (enu.hasMoreElements()) {
dl = (DemoListener) enu.nextElement();
dl.demoEvent(event);
}
}
//
删除监听器,如果这里没有使用Vector而是使用ArrayList那么要注意同步问题
public
void removeDemoListener(DemoListener dl) {
repository.remove(dl);
//
这步要注意同步问题
}
/**
* 设置属性
*
@param str1 String
*/
public
void setName(String str1) {
boolean bool =
false;
if (str1 ==
null && sName !=
null)
bool =
true;
else
if (str1 !=
null && sName ==
null)
bool =
true;
else
if (!sName.equals(str1))
bool =
true;
this
.sName
=
str1;
//
如果改变则执行事件
if (bool)
notifyDemoEvent(
new DemoEvent(
this, sName));
}
public
String getName() {
return sName;
}
}
package
com.te.event.other;
import
java.lang.Thread;
/**
* Title: 测试类
* Description: 测试了由于改变属性而引起的事件发生
* Copyright: Copyright (c) 2005
* Company: cuijiang
*
@author not attributable
*
@version 1.0
*/
public
class
TestDemo
implements DemoListener {
private DemoSource ds;
public
TestDemo()
{
ds=
new DemoSource();
ds.addDemoListener(
this);
System.out.println("添加监听器完毕");
try {
Thread.sleep(3000);
//
改变属性,触发事件
ds.setName("改变属性,触发事件");
}
catch (InterruptedException ex) {
ex.printStackTrace();
}
ds.addDemoListener(
this
);
System.out.println("添加监听器完毕2");
try {
Thread.sleep(3000);
//
改变属性,触发事件
ds.setName("改变属性,触发事件2");
}
catch (InterruptedException ex) {
ex.printStackTrace();
}
ds.removeDemoListener(
this
);
System.out.println("添加监听器完毕3");
try {
Thread.sleep(3000);
//
改变属性,触发事件
ds.setName("改变属性,触发事件3");
}
catch (InterruptedException ex) {
ex.printStackTrace();
}
}
public
static
void main(String args[])
{
new
TestDemo();
}
/**
* demoEvent
*
*
@param dm DemoEvent
* @todo Implement this test.DemoListener method
*/
public
void demoEvent(DemoEvent dm) {
System.out.println("事件处理方法");
System.out.println(dm.getName());
dm.say();
}
}
java的响应机制_JAVA事件响应机制相关推荐
- android gridview 按钮事件处理,Android TV gridview 的按键事件响应巧变 事件分发机制...
在gridview点击事件之后,打log看了下, 看到gridview的onclick事件响应的竟然排在onkeyup之后,这造成100~200ms的延迟啊, 后来换了在其它响应事件里面截取,但是在o ...
- java tcp 心跳机制_Java实现心跳机制的方法
一.心跳机制简介 在分布式系统中,分布在不同主机上的节点需要检测其他节点的状态,如服务器节点需要检测从节点是否失效.为了检测对方节点的有效性,每隔固定时间就发送一个固定信息给对方,对方回复一个固定信息 ...
- java spi机制_Java 双亲委派机制的破坏—SPI机制
作者:程序猿微录 出自:TinyRecord 原文:tinyice.cn/articles/123 Java 双亲委派机制的破坏-SPI机制 在Java的类加载机制中,默认的就是双亲委派机制,这种委派 ...
- Android事件的响应,Android 开发事件响应之基于监听的事件响应
Android 开发事件响应之基于监听的事件响应 本文将介绍Android 操作系统如何通过监听来实现对事件的响应. Android 开发事件响应之基于监听的事件响应 背景介绍 Android 开发事 ...
- Javascript事件模型系列(二)事件的捕获-冒泡机制及事件委托机制
一.事件的捕获与冒泡 由W3C规定的DOM2标准中,一次事件的完整过程包括三步:捕获→执行目标元素的监听函数→冒泡,在捕获和冒泡阶段,会依次检查途径的每个节点,如果该节点注册了相应的监听函数,则执行监 ...
- java的自省机制_JAVA内省(自省)机制 ( Introspector , BeanInfo, PropertyDescriptor )
目的和作用: 通过内省,获取和操作javaBean中的成员信息(方法,事件,属性). ------------------内省使用的核心类(接口)-------------------– Java.b ...
- java实现请求发送_java实现响应重定向发送post请求操作示例
本文实例讲述了java实现响应重定向发送post请求操作.分享给大家供大家参考,具体如下: 关于重定向我们用的比较多的还是redirect:重定向,默认发送的get请求. return "r ...
- java 强制垃圾回收_Java垃圾回收机制
Java垃圾回收机制 垃圾回收机制用到finalize.当程序创建对象.数组等引用类型实体时,系统都会在堆内存中为之分配一块内存区,对象就保存在这块内存中,当这块内存不再被任何引用变量引用时,这块内存 ...
- java 有哪些反射机制_Java 的反射机制你了解多少?
不知道多少次听说过了Java反射机制的使用,比如:Spring 框架如何实例化IoC容器中的Bean,编码过程中如何动态的清理对象中的字段信息等等.工作中只是听说.看同事们编码实践,但是自己却只是概念 ...
最新文章
- IL,Emit之OpCodes说明(备查)
- HEW MAP文件使用
- Mac 新建unix可执行文件
- java.lang.Math
- pgadmin4 python
- 06.delete_by_query操作
- 关于谷歌云,你应该知道的一切! | 技术头条
- 如何将多个文件捆绑成一个可执行文件
- python runtime错误_Python错误:没有名为RuntimeE的模块
- 【日本語勉強】日本語四級文法突撃(11~20)
- tensorflow 安装_安装tensorflow-gpu 2.0
- 【Laravel】使用 Laravel Excel 实现 Excel/CSV 文件导入导出功能
- 文件同步工具CwRsync的使用教程
- mysql 数据库引擎切花_asyncio异步编程,你搞懂了吗?
- mysql中如何删除某个字段中的某个字符
- 剑指offer-二叉树(python)
- 前装ADAS单月搭载量创11个月以来新低,“缺芯”背后暗潮涌动
- 著名的斐波拉契数列(Fibonacci),除第一个和第二个数外,任意一个数都可由前两个数相加得到: 1, 1, 2, 3, 5, 8, 13, 21, 34, ...
- 甜菜碱改善肥胖和代谢,肠道菌群是关键
- 物联网平台行业类型划分:CMP、DMP、AEP、BAP
热门文章
- 阿里云科学家入选计算机顶会 HPCA 名人堂,他是什么来头?
- 微信 iOS 版正式支持深色模式;谷歌宣布彻底取消I/O开发者大会;Visual Studio 2019 16.5发布|极客头条...
- 40万亿“新基建”来了!程序员的新翻身机会终于也来了!
- 面对疫情,AI 能做什么?
- 程序员VS产品经理日常
- 如何使用 kubeadm 安装 Kubernetes?
- “对不起,我就是传说中的 10 倍工程师”
- 《长安十二时辰》火了!程序员版本过于真实!
- Oracle 痛裁程序员,阿里云坐收渔翁利?
- CSDN 创始人蒋涛:AI 定义的开发者时代