Java 通用异常处理类

本文介绍了一个自定义的异常管理器类的设计与实现。该类用于统一处理所有异常情况,并通过对话框展示异常堆栈跟踪和消息。提供了多种构造函数以适应不同的使用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**
 * (#)ThrowableManager.java	1.0	Apr 10, 2008
 * 
 * Copyright 2007- wargrey , Inc. All rights are reserved.
 */
package net.wargrey.application;

import java.awt.Component;
import javax.swing.JOptionPane;

/**
 * This class <code>ExceptionManager</code> and its subclasses are a form of 
 * <code>Exception</code>. It is used to wrap all the <code>Throwable</code> instances
 * and handle them in a unified way. It will show the information which consists of 
 * StackTraces and Messages by using JOptionPanel.
 * 
 * @author Estelle
 * @version 1.0
 * @see java.lang.Exception
 * @since jdk 1.5
 */
public class ExceptionManager extends RuntimeException {
	
	/**
	 * This field <code>alerter</code> is used to show the information the Class offered.
	 * 
	 * @see javax.swing.JOptionPane
	 */
	private JOptionPane alerter;
	
	/**
	 * This static method create an instance of the ExceptionManager by invoking the 
	 * constructor <code>ExceptionManager(String msg)</code>.
	 * 
	 * @param msg	The message will pass the specified constructor
	 * @return	An instance of the ExceptionManager created by invoking the constructor
	 * 			<code>ExceptionManager(String msg)</code>.
	 */
	public static ExceptionManager wrap(String msg){
		return new ExceptionManager(msg);
	}
	
	/**
	 * This static method create an instance of the ExceptionManager by invoking the 
	 * constructor <code>ExceptionManager(Throwable throwable)</code>.
	 * 
	 * @param throwable		The cause will pass the specified constructor
	 * @return	An instance of the ExceptionManager created by invoking the constructor
	 * 			<code>ExceptionManager(Throwable throwable)</code>.
	 */
	public static ExceptionManager wrap(Throwable throwable){
		return new ExceptionManager(throwable);
	}
	
	/**
	 * This static method create an instance of the ExceptionManager by invoking the 
	 * constructor <code>ExceptionManager(String msg,Throwable throwable)</code>. 
	 * 
	 * @param msg			The message will pass the specified constructor
	 * @param throwable		The cause will pass the specified constructor
	 * @return	An instance of the ExceptionManager created by invoking the constructor
	 * 			<code>ExceptionManager(String msg, Throwable throwable)</code>
	 */
	public static ExceptionManager wrap(String msg,Throwable throwable){
		return new ExceptionManager(msg,throwable);
	}
	
	/**
	 * Constructs a new instance with the specified detail message. The concrete handler 
	 * is its super class. This constructor always used to construct a custom exception
	 * not wrapping the exist exception.
	 * 
	 * @param msg		the detail message which is the part of the information will be
	 * 					shown.
	 */
	public ExceptionManager(String msg){
		super(msg);
	}
	
	/**
	 * Constructs a new instance with the specified detail cause. The concrete handler 
	 * is its super class. This constructor always used to wrap an exist exception.
	 * 
	 * @param throwable		the cause which has been caught. It's detail message and 
	 * 						stacktrace are the parts the information will be shown.
	 */
	public ExceptionManager(Throwable throwable){
		super(throwable);
	}
	
	/**
	 * Constructs a new instance with the specified detail message and cause. The 
	 * concrete handler is its super class. This constructor always used to construct
	 * an exception wrapping the exist exception but requires a custom message. 
	 * 
	 * @param msg		the detail message which is the part of the information will 
	 * 					be shown.
	 * @param throwable	the cause which has been caught. It's stacktrace is the parts
	 * 					the information will be shown.
	 */
	public ExceptionManager(String msg,Throwable throwable){
		super(msg,throwable);
	}
	
	/**
	 * Show the information with everything is default.
	 */
	public synchronized void alert(){
		alert((Component)null);
	}
	
	/**
	 * Show the information in a dialog with the specified title 
	 * "ThrowableManager Alerter". The dialog belongs to the given component which 
	 * default is the screen. 
	 * 
	 * @param parent	The component cause the exception.
	 */
	public synchronized void alert(Component parent){
		alert(parent,"ThrowableManager Alerter");
	}
	
	/**
	 * Show the information in a dialog with the specified title.
	 * 
	 * @param title		The title of the dialog.
	 */
	public synchronized void alert(String title){
		alert((Component)null,title);
	}
	
	/**
	 * Show the information in a dialog which has the specified title and belongs to the
	 * specified component.
	 * 
	 * @param parent	The component cause the exception.
	 * @param title		The title of the dialog.
	 */
	public synchronized void alert(Component parent,String title){
		StringBuilder errorMessage=new StringBuilder();
        errorMessage.append(this.toString());
    	for (StackTraceElement st:((this.getCause()==null)?this:this.getCause()).getStackTrace()){
    		errorMessage.append("\n\t     at ");
    		errorMessage.append(st.toString());
    	}        
		alerter.showMessageDialog(parent, errorMessage, title ,JOptionPane.ERROR_MESSAGE);
		System.err.println(errorMessage);
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值