`
xxjkcyt
  • 浏览: 5712 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

利用二路分发实现JAVA异常处理

阅读更多
import java.io.FileNotFoundException;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.net.SocketTimeoutException;
import java.util.HashMap;
import java.util.Map;

public class ExceptionHandler
{
    public interface ExceptionItem
    {
        Class<?> exceptionType();
       
        void display();
    }
   
    public void handleException(Exception e)
    {
        ExceptionItem exceptItem = AbstractExceptionItem.wrapException(e);
        displayExceptionInfo(exceptItem);
    }
   
    private final void displayExceptionInfo(ExceptionItem item)
    {
        item.display();
    }
   
    private abstract static class AbstractExceptionItem implements
            ExceptionItem
    {
        private static Map<Class<? extends Exception>, Class<? extends ExceptionItem>> innerMap = new HashMap<Class<? extends Exception>, Class<? extends ExceptionItem>>();
        static
        {
            innerMap.put(FileNotFoundException.class,
                    FileNotFoundExceptionItem.class);
            innerMap.put(SocketTimeoutException.class,
                    SocketTimeoutExceptionItem.class);
        }
       
        protected Class<?> exceptionType;
       
        protected Exception e;
       
        protected AbstractExceptionItem(Exception e)
        {
            this.e = e;
            this.exceptionType = e.getClass();
        }
       
        private static final ExceptionItem wrapException(final Exception except)
        {
            final Class<?> exceptionType = except.getClass();
            Class<? extends ExceptionItem> cls = innerMap.get(exceptionType);
            if (null == cls)
                return null;
            try
            {
                Constructor<? extends ExceptionItem> constructor = cls.getDeclaredConstructor(new Class<?>[] { Exception.class });
                return constructor.newInstance(except);
            }
            catch (SecurityException e1)
            {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            catch (NoSuchMethodException e1)
            {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            catch (IllegalArgumentException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            catch (InstantiationException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            catch (IllegalAccessException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            catch (InvocationTargetException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
           
            return null;
        }
    }
   
    private static final class FileNotFoundExceptionItem extends
            AbstractExceptionItem
    {
        FileNotFoundExceptionItem(Exception e)
        {
            super(e);
        }
       
        @Override
        public Class<?> exceptionType()
        {
            return exceptionType;
        }
       
        @Override
        public void display()
        {
            System.out.printf("The file [%s] is not found!", e.getMessage());
           
        }
    }
   
    private static final class SocketTimeoutExceptionItem extends
            AbstractExceptionItem
    {
        SocketTimeoutExceptionItem(Exception e)
        {
            super(e);
        }
       
        @Override
        public Class<?> exceptionType()
        {
            return exceptionType;
        }
       
        @Override
        public void display()
        {
            System.out.printf("The socket connect timed out, detail message is:[%s]",
                    e.getMessage());
        }
    }
   
    /**
     * @param args
     */
    public static void main(String[] args)
    {
        ExceptionHandler instance = new ExceptionHandler();
        instance.handleException(new SocketTimeoutException("connection refused to 10.60.7.69"));
    }
}
分享到:
评论

相关推荐

    消息分发框架(基于JAVA阻塞队列实现、 生产者消费者模型)

    综上所述,"消息分发框架(基于JAVA阻塞队列实现、生产者消费者模型)"是一个关键的并发处理组件,通过Java提供的并发工具和设计模式,实现了高效、稳定的消息处理。在实际应用中,需要根据业务需求进行适当的性能...

    java 反射和分发器原理

    Java反射和分发是Java编程中的高级特性,它们在许多实际场景中发挥着重要作用,比如框架设计、插件系统、动态代理等。本教程将深入探讨这两个概念,并通过实例代码来帮助理解其工作原理。 首先,让我们理解Java反射...

    关于JAVA中事件分发和监听机制实现的代码实例

    5. **事件分发**:事件分发是Java AWT和Swing框架内部处理的一部分。当事件发生时,事件源会创建一个事件对象,并将其传递给事件队列。然后,事件调度线程会从队列中取出事件并调用相应监听器的处理方法。在Swing中...

    java版群集分发器

    6. **Java编程**:作为Java版的群集分发器,其底层实现很可能基于Java语言,利用Java的多线程、网络编程和并发处理能力。Java的跨平台特性也使得该分发器能在各种操作系统上运行。 7. **类(Classes)**:压缩包中...

    java实现流量控制流量控制

    在Java中,我们可以利用Socket类和相关的API来实现TCP连接,并通过设置缓冲区大小来间接控制流量。 1. **Socket类和BufferedInputStream/BufferedOutputStream** Java的Socket类提供了与服务器建立TCP连接的功能。...

    开心超级签系统源码 Java超级签名系统apk分发系统源码

    "Java超级签名系统"是指利用Java语言实现的一种特殊签名方式,它可能涉及到自定义的签名流程或者优化的签名服务,使得应用签名更加便捷、高效。通常,这种系统会提供自动化签名服务,开发者无需手动处理签名过程,只...

    Java源码打包分发源码 打包免签分发平台+搭建说明

    Java源码打包分发源码是开发者们进行软件发布与管理的一种常见方式,尤其是在移动应用开发领域。这个打包免签分发平台提供了便捷的途径,让开发者能够将他们的应用程序打包并分发出去,而无需经过复杂的签名过程。...

    Mule 实现路由分发

    7. **异常处理**: 在实现路由分发时,必须考虑异常处理。Mule提供了错误处理策略,如On Error Continue和On Error Propagate,以确保即使在出现错误时也能优雅地处理消息。 8. **性能与可扩展性**: Mule的路由分发...

    用Java事件处理机制实现录制回放功能

    在本文中,我们将深入探讨如何利用Java事件处理机制实现录制和回放功能,这种功能常见于GUI测试工具中,用于捕获用户操作并在代码修改后自动回放这些操作。 1. Java 事件介绍 - **事件是什么**:在Java中,事件是...

    金融系统常用异常处理

    1. 异常捕获:通过编程语言提供的异常处理机制(如Java的try-catch-finally,Python的try-except-finally等),捕获运行时发生的异常。 2. 异常日志记录:详细记录异常信息,包括时间、位置、异常类型、堆栈跟踪等,...

    如何利用JNI实现Java插件开发

    ### 如何利用JNI实现Java插件开发 #### 一、JNI简介 JNI(Java Native Interface)是Java平台标准的一部分,它允许Java代码与其他语言写的代码进行交互。JNI在Java与本地代码之间提供了一个桥梁,使得Java可以调用...

    Java源码包及分发源码包及免签证分发平台搭建说明

    本资源"Java源码包及分发源码包及免签证分发平台搭建说明"提供了一种免签证的源码分发平台的搭建方案,对于Java开发者来说尤其有价值。这个平台允许开发者们在不需经过复杂签名验证的情况下,安全、高效地分享和分发...

    JAVA事件处理指南+源码

    - "JAVA事件处理指南 源码.rar"包含了书中示例的源代码,这些代码可以帮助读者更直观地理解事件处理的实现细节。 7. **Swing与AWT事件** - Swing是建立在AWT之上的UI库,提供了更丰富的组件和事件处理机制。Swing...

    JAVA事件处理指南

    在Java编程语言中,事件处理是用户界面(UI)编程的核心部分,它使得应用程序能够响应用户的操作,如点击按钮、选择菜单项或者滚动窗口。在《JAVA事件处理指南》这本书中,作者深入浅出地讲解了Java事件处理的各个...

    kerberos的java实现

    Java语言实现的Kerberos允许开发者在Java应用中集成这种强大的安全机制。 **Java与Kerberos的结合** Java中的Kerberos支持主要体现在Java的`javax.security.auth.kerberos`包中,提供了与Kerberos协议交互的一系列...

    java电子教室,文件分发,远程监控

    Java电子教室系统是一种基于Java技术实现的教育软件,主要用于实现课堂教学、远程监控、文件分发以及屏幕广播等功能。这样的系统通常包含多个模块,以满足教师和学生在远程教学环境下的需求。下面将详细阐述这些核心...

    自己写的android事件分发拦截处理的代码可以清楚知道事件分发拦截和处理的过程.rar

    - "JavaApk源码说明.txt":可能包含了关于源码的详细解释,包括各个类和方法的作用,以及如何实现事件分发的拦截。 - "下载更多打包源码~.url":可能是一个链接,用于获取更多的Android事件分发相关的源码示例。 ...

    java毕业设计——java文件传输系统的设计与实现(论文+源代码).zip

    java毕业设计——java文件传输系统的设计与实现(论文+源代码).zip java毕业设计——java文件传输系统的设计与实现(论文+源代码).zip java毕业设计——java文件传输系统的设计与实现(论文+源代码).zip java毕业设计...

    基于web的电子邮件自动分发系统

    【基于Web的电子邮件自动分发系统】是一种利用网络技术实现高效、智能化的邮件管理解决方案。在该系统中,主要采用了JavaServer Pages(JSP)技术,Model-View-Controller(MVC)架构模式,以及Tomcat 5.5作为应用...

Global site tag (gtag.js) - Google Analytics