dispatcher.java

来自「java异步事件池」· Java 代码 · 共 116 行

JAVA
116
字号
/*
 * Created on 2003-12-22
 *
 * To change the template for this generated file go to
 * Window - Preferences - Java - Code Generation - Code and Comments
 */
package com.product.util.event;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

/**
 * @author Renzhichao
 *
 * 
 */
public class Dispatcher implements Runnable{ 
    private boolean flag = true ;
    
    private String canHandlerEventClass = "" ;
    
    public Dispatcher(){
    }
    Collection handlers = new ArrayList() ;    

    public synchronized void stop(){
        flag=false ;
    }

    /* (non-Javadoc)
     * @see java.lang.Runnable#run()
     */
    public void run() {
        while(flag){            
            if (canHandlerEventClass!=null&&canHandlerEventClass.length()>0){
                dispatchEvent(getEvent(canHandlerEventClass)) ;            
            }
            else {
                dispatchEvent(getEvent()) ;
            }
        }                
    }
        
    /**
     * 当为true的时候表示如果不能全部处理就扔回事件池中。
     * 当为false的时候表示如果不能处理也扔掉
     */
    public boolean willTurnBack=false ;//是否扔回事件池中?
    
    private Event getEvent(){
        return EventQueue.getInstance().getEvent() ;
    }
    
    private Event getEvent(String evtClass){
        return EventQueue.getInstance().getEvent(evtClass) ;
    }
    
    private void dispatchEvent(Event evt){
        if (null==evt) return ;        
        boolean flag = true ;
        try {
            for (Iterator iter = handlers.iterator(); iter.hasNext(); ) {
                EventHandler element = (EventHandler) iter.next();
                flag = flag && element.handleEvent(evt) ;
            }
            if (flag){
                EventSerialManager.deleteEvent(evt) ;            
            }
            else if (willTurnBack){
                EventQueue.getInstance().putEvent(evt) ;
            }            
            else {
                EventSerialManager.deleteEvent(evt) ;
            }
        } catch (Exception e) {        
            e.printStackTrace();
            EventQueue.getInstance().putEvent(evt) ;
        }
    }
    
    public static void main(String[] args){        
    }
    /**
     * @param o
     * @return
     */
    public boolean add(EventHandler handler) {
        return handlers.add(handler);
    }
    /**
     * @return Returns the canHandlerEventClass.
     */
    public String getCanHandlerEventClass() {
        return this.canHandlerEventClass;
    }
    /**
     * @param canHandlerEventClass The canHandlerEventClass to set.
     */
    public void setCanHandlerEventClass(String canHandlerEventClass) {
        this.canHandlerEventClass = canHandlerEventClass;
    }
    /**
     * @return Returns the willTurnBack.
     */
    public boolean isWillTurnBack() {
        return this.willTurnBack;
    }
    /**
     * @param willTurnBack The willTurnBack to set.
     */
    public void setWillTurnBack(boolean willTurnBack) {
        this.willTurnBack = willTurnBack;
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?