动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
电脑书籍下载:程序设计书籍 | 数据库教程书籍 | 平面与多媒体书籍 | 网络通讯书籍 | 系统管理书籍 | 网络安全书籍 | 认证考试书籍
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息



本月文章推荐
.如何在Eclipse中用Hibernate插件.
.可以用于网页背景.
.利用Java实现串口全双工通讯.
.J2ME学习札记2.
.在servlet中直接写端口发送邮件的.
.对“类”的理解.
.java的30个学习目标.
.一个关于过程原码.
.类装入问题解密,第 2 部分: 基本.
.什么是Servlet以及Servlet的优越.
.JAVA新手必备:Java基础之关键字.
..NET跨平台的第一步.
.全面研读EJB 2.0.
.Struts安装配置.
.编写Java GUI的好工具WindowBuil.
.Java嵌入式开发讲座 第三讲.
.利用Java完成域名和IP地址的转换.
.为什么程序员不应调用“sun”包?.
.servlet的一些特点.
.SCJP认证套题解析(2).

驯服Tiger之线程中的默认异常处理

发表日期:2008-1-5 |



  跟踪无法预期的运行时异常可能是一件又慢又费力的事情,只获得默认线程名称和堆栈跟踪通常是不够的。在文中,Java 开发人员 John Zukowski 向您展示了如何通过替代默认行为来定制输出。
他还对比了通过细分 ThreadGroup 定制输出的老方法与通过提供自己的 UncaughtExceptionHandler 定制输出的新方法。

  虽然我们不想创建在无法预期时抛出运行时异常的程序,但这种情况还是会发生——尤其是第一次运行复杂程序时。通常是使用默认行为、打印堆栈溢出和结束线程的生命来处理这些异常。

  从哪里发现默认行为?每个线程都属于一个由 java.lang.ThreadGroup 类表示的线程组。顾名思义,线程组答应您将线程组合在一起。您可能是为了方便而将线程组合,例如,一个线程池中的所有线程都属于组 X,而另一个池的所有线程则属于组 Y,或者是为了访问控制而将线程进行组合。组 X 中的线程无权访问或改变组 Y 中的线程,除非它们都在同一线程组内(或在一个子组内)。

  在 Tiger 之前, ThreadGroup 类提供了一种处理未捕捉异常的方法: ThreadGroup 的 uncaughtException() 方法。假如异常不是 ThreadDeath ,则将线程的名称和堆栈回溯(stack backtrace)发送到 System.err 。但是 Tiger 添加了另一种方法: Thread.UncaughtExceptionHandler 接口。细分 ThreadGroup 或安装该新接口的实现都答应您更改默认行为。我们将对 Tiger 之前和之后提供的方法都进行研究。

  使用 ThreadGroup 的定制行为

  发生未捕捉的异常时,默认行为是将堆栈溢出打印输出到系统错误( System.err )中,如清单 1 中所示。不需要使用任何命令参数来启动程序。

  清单 1. 线程溢出示例

public class SimpleDump {
 public static void main(String args[]) {
  System.out.println(args[0]);
 }
}
  不使用任何参数运行该程序将生成清单 2 中的输出。尽管它不是一个很长的堆栈跟踪,但它是一个完整的堆栈跟踪。

  清单 2. 默认线程溢出输出

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at SimpleDump.main(SimpleDump.java:3)
  正如 Java 平台的许多东西一样,假如不喜欢默认行为,您可以对其进行更改。在 Java 平台的 Tiger 版以前的版本中,不能替代所有线程的默认行为,但是可以创建一个新的 ThreadGroup ,并更改在该组内创建的任何线程的默认行为。您可以重写 uncaughtException(Thread t, Throwable e) 方法来定制该行为。然后,当发生未预料的运行时异常时,该线程组内创建的任何线程都将获得新的行为。不过,最好是修复基础问题,我将提供一个简单的示例,说明更改默认行为所必需的步骤。清单 3 展示了将执行代码放入新线程的调整过的测试程序:

  清单 3. 调整过的线程溢出示例

public class WindowDump {
 public static void main(String args[]) throws Exception {
  ThreadGroup group = new LoggingThreadGroup("Logger");
  new Thread(group, "myThread") {
   public void run() {
    System.out.println(1 / 0);
   }
  }.start();
 }
}
  LoggingThreadGroup 类是一个新的内容,清单 4 中显示了它的定义。为了进行说明,通过重写 uncaughtException() 方法实现的非凡行为将在一个弹出窗口中显示该异常,这项操作是在非凡 Handler 的帮助下使用 Java Logging API 来完成的。

  清单 4. LoggingThreadGroup 的定义

import java.util.logging.*;

public class LoggingThreadGroup extends ThreadGroup {
 private static Logger logger;
 public LoggingThreadGroup(String name) {
  super(name);
 }
 public void uncaughtException(Thread t, Throwable e) {
  // Initialize logger once
  if (logger == null) {
   logger = Logger.getLogger("example");
   Handler handler = LoggingWindowHandler.getInstance();
   logger.addHandler(handler);
  }
  logger.log(Level.WARNING, t.getName(), e);
 }
}
  这里创建的定制 Handler 的类型为 LoggingWindowHandler ,该类型的定义在清单 5 中。处理程序使用了一个支持类 LoggingWindow ,该类将异常显示在屏幕上。 清单 6 中显示了该类的定义。 Handler 的 public void publish(LogRecord record) 方法实现了一些重要操作。其余操作大部分只与配置有关。

  清单 5. LoggingWindowHandler 的定义



上一篇:JBuilder光标问题的解决方案 人气:361
下一篇:Struts+Spring+Hibernate快速入门 人气:448
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-7-6 飞天论坛FTBBS ASP v6.3 Build 0
2008-7-6 飞天论坛FTBBS ASP v6.3 Build 0
2008-7-6 飞天论坛FTBBS ASP v6.8 Build 0
2008-7-6 讯息内容管理系统 v2.1
2008-7-6 三五电影程序 v2.0
2008-7-6 神鹰腾讯小说小偷 v3.0
2008-7-6 EasyIDE Framework v1.0 Build 2
2008-7-6 品告CMS系统(电影版) v0.9
2008-7-6 QQ自动登录器 C# 源码 v1.0
2008-7-5 AgileMessenger即时通讯工具 v1.
2008-7-5 GoodCalculator2.0版固件计算器
2008-7-5 RepoName源地址搜索工具 v1.21b
2008-7-5 AgileMessenger即时通讯工具 v1.
2008-7-5 TouchCopy多媒体管理软件 v3.13完
2008-7-5 VideosTone视频铃声 v1.1汉化破解
2008-7-5 TouchPad触摸板 v4.44破解版
2008-7-5 VideosTone破解补丁 v1.0
2008-7-5 Feeds GoogleReader客户端 v0.4.3


  发表评论
姓 名: 验证码:
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報