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反射...
5. **事件分发**:事件分发是Java AWT和Swing框架内部处理的一部分。当事件发生时,事件源会创建一个事件对象,并将其传递给事件队列。然后,事件调度线程会从队列中取出事件并调用相应监听器的处理方法。在Swing中...
6. **Java编程**:作为Java版的群集分发器,其底层实现很可能基于Java语言,利用Java的多线程、网络编程和并发处理能力。Java的跨平台特性也使得该分发器能在各种操作系统上运行。 7. **类(Classes)**:压缩包中...
在Java中,我们可以利用Socket类和相关的API来实现TCP连接,并通过设置缓冲区大小来间接控制流量。 1. **Socket类和BufferedInputStream/BufferedOutputStream** Java的Socket类提供了与服务器建立TCP连接的功能。...
"Java超级签名系统"是指利用Java语言实现的一种特殊签名方式,它可能涉及到自定义的签名流程或者优化的签名服务,使得应用签名更加便捷、高效。通常,这种系统会提供自动化签名服务,开发者无需手动处理签名过程,只...
Java源码打包分发源码是开发者们进行软件发布与管理的一种常见方式,尤其是在移动应用开发领域。这个打包免签分发平台提供了便捷的途径,让开发者能够将他们的应用程序打包并分发出去,而无需经过复杂的签名过程。...
7. **异常处理**: 在实现路由分发时,必须考虑异常处理。Mule提供了错误处理策略,如On Error Continue和On Error Propagate,以确保即使在出现错误时也能优雅地处理消息。 8. **性能与可扩展性**: Mule的路由分发...
在本文中,我们将深入探讨如何利用Java事件处理机制实现录制和回放功能,这种功能常见于GUI测试工具中,用于捕获用户操作并在代码修改后自动回放这些操作。 1. Java 事件介绍 - **事件是什么**:在Java中,事件是...
1. 异常捕获:通过编程语言提供的异常处理机制(如Java的try-catch-finally,Python的try-except-finally等),捕获运行时发生的异常。 2. 异常日志记录:详细记录异常信息,包括时间、位置、异常类型、堆栈跟踪等,...
### 如何利用JNI实现Java插件开发 #### 一、JNI简介 JNI(Java Native Interface)是Java平台标准的一部分,它允许Java代码与其他语言写的代码进行交互。JNI在Java与本地代码之间提供了一个桥梁,使得Java可以调用...
本资源"Java源码包及分发源码包及免签证分发平台搭建说明"提供了一种免签证的源码分发平台的搭建方案,对于Java开发者来说尤其有价值。这个平台允许开发者们在不需经过复杂签名验证的情况下,安全、高效地分享和分发...
- "JAVA事件处理指南 源码.rar"包含了书中示例的源代码,这些代码可以帮助读者更直观地理解事件处理的实现细节。 7. **Swing与AWT事件** - Swing是建立在AWT之上的UI库,提供了更丰富的组件和事件处理机制。Swing...
在Java编程语言中,事件处理是用户界面(UI)编程的核心部分,它使得应用程序能够响应用户的操作,如点击按钮、选择菜单项或者滚动窗口。在《JAVA事件处理指南》这本书中,作者深入浅出地讲解了Java事件处理的各个...
Java语言实现的Kerberos允许开发者在Java应用中集成这种强大的安全机制。 **Java与Kerberos的结合** Java中的Kerberos支持主要体现在Java的`javax.security.auth.kerberos`包中,提供了与Kerberos协议交互的一系列...
Java电子教室系统是一种基于Java技术实现的教育软件,主要用于实现课堂教学、远程监控、文件分发以及屏幕广播等功能。这样的系统通常包含多个模块,以满足教师和学生在远程教学环境下的需求。下面将详细阐述这些核心...
- "JavaApk源码说明.txt":可能包含了关于源码的详细解释,包括各个类和方法的作用,以及如何实现事件分发的拦截。 - "下载更多打包源码~.url":可能是一个链接,用于获取更多的Android事件分发相关的源码示例。 ...
java毕业设计——java文件传输系统的设计与实现(论文+源代码).zip java毕业设计——java文件传输系统的设计与实现(论文+源代码).zip java毕业设计——java文件传输系统的设计与实现(论文+源代码).zip java毕业设计...
【基于Web的电子邮件自动分发系统】是一种利用网络技术实现高效、智能化的邮件管理解决方案。在该系统中,主要采用了JavaServer Pages(JSP)技术,Model-View-Controller(MVC)架构模式,以及Tomcat 5.5作为应用...