`

swing学习 - 运行时异常捕获【转】

    博客分类:
  • JAVA
阅读更多

J2SE 5.0 新增的UncaughtExceptionHandler接口,UncaughtExceptionHandler名字意味着处理未捕获的异常。更明确的说,它处理未捕获的运行时异常。Java编译器要求处理所有非运行时异常,否则程序不能编译通过。这里“处理”的是方法里throws子句声明的异常或在try-catch块里的catch子句的异常。

       在下面的示例中,让我们关注两个异常:FileNotFoundExceptionArithmeticException。如果使用一个不正确的StringFile参数值来构造FileReader时,将会抛出FileNotFoundException异常。当你调用这些构造函数时,编译器要求你处理每一个可能抛出异常的子句:

 

FileReader input;

   String filename = ...;

   try {

     input = new FileReader(filename);

   } catch (FileNotFoundException e) {

     processMissingFile(filename, e);

   }

      

我们再来比较一下,ArithmeticException是一个运行时异常。Java编程语言规范(对于编译器而言)不要求处理运行时异常。因此在下面的循环中,从100都会被100除,而在最后一次循环中将抛出ArithmeticException异常:

 

for (int i=10; i >= 0; i--) {

     int div = 100 / i;

   }

 

   Exception in thread "main" java.lang.ArithmeticException: /

   by zero

        at Test.main(Test.java:4)

      

输出堆栈信息显示出缺省未捕获的异常内容。通常说来,这样的缺省行为已经足够了,不过有时也不行。设想你想在弹出式窗口输出堆栈信息,来替代在系统控制台输出该信息。如果你自己设置一个缺省的未捕获异常处理,你就可以得到这样的效果。

       这里有三个最新的处理未捕获异常的方法。

  • 第一,你可以调用ThreadsetUncaughtExceptionHandler()方法。这个方法允许你在特殊的线程里定制行为。
  • 第二,你可以定义你自己的ThreadGroup并改变行为使每个线程都从这个组中创建并重写它们的uncaughtException()方法。
  • 第三,你可以设置缺省行为让所有线程调用Thread的静态方法setDefaultUncaughtExceptionHandler()

       ThreadsetUncaughtExceptionHandler()setDefaultUncaughtExceptionHandler()方法都需要实现UncaughtExceptionHandler接口作为参数。该接口是Thread类的内部接口,因此它的全名是Thread.UncaughtExceptionHandler。该接口的唯一方法是:

 

void uncaughtException(Thread t, Throwable e)

 

当你实现了uncaughtException方法或实现了该接口或重写ThreadGroup的方法,你都可以定制其行为。在下面的示例中,我们实现了UncaughtExceptionHandler,无论运行时异常何时发生,堆栈信息都会显示在窗口的文本区域里。你可以在两个异常间关闭窗口。当下次异常发生时,窗口会再次出现在其他窗口之前。

 

import java.awt.*;

   import java.io.*;

   import javax.swing.*;

 

   public class StackWindow extends JFrame

       implements Thread.UncaughtExceptionHandler {

 

     private JTextArea textArea;

 

     public StackWindow(

      String title, final int width, final int height) {

       super(title);

       setSize(width, height);

       textArea = new JTextArea();

       JScrollPane pane = new JScrollPane(textArea);

       textArea.setEditable(false);

       getContentPane().add(pane);

     }

 

     public void uncaughtException(Thread t, Throwable e) {

       addStackInfo(e);

     }

 

     public void addStackInfo(final Throwable t) {

       EventQueue.invokeLater(new Runnable() {

         public void run() {

           // Bring window to foreground

           setVisible(true);

           toFront();

           // Convert stack dump to string

           StringWriter sw = new StringWriter();

           PrintWriter out = new PrintWriter(sw);

           t.printStackTrace(out);

           // Add string to end of text area

           textArea.append(sw.toString());

        }

     });

   }

  }

 

要测试这个处理,你需要一个程序来设置这个处理并抛出一些运行时异常。在下面的程序中,DumpTeat将会这样做。为了简单,DumpTest仅仅产生两个异常。如果要抛出更多的异常,你可以自由的在程序里添加更多的错误代码。程序在第一个异常显示后会暂停,你可以在异常间关闭异常堆栈窗口。

 

import java.io.*;

 

   public class DumpTest {

    public static void main(final String args[])

     throws Exception {

       Thread.UncaughtExceptionHandler handler =

         new StackWindow("Show Exception Stack", 400, 200);

       Thread.setDefaultUncaughtExceptionHandler(handler);

       new Thread() {

         public void run() {

           System.out.println(1 / 0);

         }

       }.start();

       BufferedReader br =

         new BufferedReader(new InputStreamReader(System.in));

       System.out.print("Press Enter for next exception");

       br.readLine();

       new Thread() {

         public void run() {

           System.out.println(args[0]);

         }

       }.start();

       System.out.print("Press Enter to end");

       br.readLine();

       System.exit(0);

     }

   }

 

分享到:
评论

相关推荐

    swing_C-S图书销售管理系统GUI(JAVA源码+数据库sql+论文)

    10. **异常处理**:良好的异常处理机制能够确保程序在遇到错误时能够优雅地恢复,而不是崩溃。在Java中,使用try-catch-finally语句块来捕获和处理异常。 通过学习和分析这个系统,开发者不仅可以掌握Java Swing ...

    学生学籍管理系统swing-sqlite

    5. 错误处理:添加异常捕获,确保程序的稳定性和用户体验。 六、系统优势与适用场景 1. 简单易用:对于初学者,Java Swing和SQLite都是易于理解和上手的工具。 2. 自包含:SQLite无需独立服务器,简化了部署和运行...

    Swing小管理项目源码

    7. **异常处理**:为了保证程序的稳定运行,代码中应有适当的异常处理机制,如try-catch-finally结构,捕获并处理可能出现的错误。 8. **布局管理**:Swing提供了多种布局管理器(如FlowLayout, BorderLayout, ...

    swing界面开发—java 基础/数据结构/网络编程/线程/异常处理/jdbc数据库操作/swing控件开发大全

    - **异常处理**:了解如何使用try-catch-finally语句块来捕获和处理程序运行时可能出现的错误,以及如何自定义异常。 2. **数据结构**: - **基本数据结构**:数组、链表、栈、队列等,它们在程序中的应用和实现...

    java swing mysql实现的酒店管理系统项目源码_swing_JavaSwing_酒店管理系统_

    Java的try-catch语句块用于捕获和处理可能出现的异常,确保系统的稳定运行。 8. **文件I/O操作**: 如果项目包含导入或导出数据的功能,那么会涉及到Java的文件I/O操作,如读取配置文件、保存日志或备份数据库。 9....

    Swing登录界面

    - 对于可能出现的错误,如网络连接问题、数据库访问异常等,应进行适当的错误处理,并通过`try-catch`块捕获异常。 9. **用户体验**: - 提供清晰的错误提示,如用户名不存在或密码错误,以及友好的交互体验,如...

    Java课程设计-基于swing的ATM智能柜员机带GUI界面(带实验报告).rar

    开发者需要使用try-catch语句来捕获和处理这些异常,保证程序的稳定运行。 9. **测试与调试**: 为了确保ATM模拟程序的正确性,开发者需要进行单元测试和集成测试,验证各个功能模块的正确性和相互间的协同工作。 ...

    Java基础知识学习--自己整理.zip

    Java提供了异常处理机制,使用try-catch-finally语句块捕获和处理运行时错误。异常类位于`java.lang.Throwable`层次结构中。 **六、集合框架** Java集合框架包括List、Set、Queue和Map接口以及它们的实现类,如...

    基于Java swing的ATM

    9. **异常处理**:在处理银行交易时,应妥善处理可能出现的异常,如网络中断、数据库错误等。通过try-catch-finally语句块捕获并处理异常,以保证程序的健壮性。 10. **测试与调试**:为了确保ATM系统的稳定性和...

    java Swing电子相册管理系统 面向对象思想

    通过try-catch语句块捕获和处理异常,可以确保程序的稳定性和用户体验。 8. **设计模式**:面向对象设计模式如单例模式(用于创建全局唯一的对象,如图片缓存)、工厂模式(用于创建对象的实例)和策略模式(用于...

    Java课程设计--javaswing的学生管理系统(GUI) .zip

    Java提供了`try-catch`块来捕获和处理可能出现的异常,确保程序的稳定运行。开发者可能会在关键代码段中加入异常处理,比如在数据库连接或SQL执行过程中。 7. **数据持久化**: 通过将学生信息存储在MySQL数据库中,...

    swing发邮件客户端

    - 调试过程中要关注错误处理和异常捕获,以提高用户体验。 9. **用户交互设计**: - 界面应该直观易用,遵循GUI设计原则,提供清晰的指示和反馈。 - 可能需要添加帮助文档或在线帮助,指导用户如何配置和使用...

    用java swing做的ATM机系统

    使用try-catch-finally结构进行异常捕获和处理,确保程序的稳定运行。 7. **事件监听**:Swing组件支持事件驱动编程,例如,按钮点击事件、键盘输入事件等。通过实现ActionListener或MouseListener等接口,可以定义...

    Java Swing库存管理系统

    Java提供了try-catch-finally语句块来捕获和处理异常,确保程序在遇到问题时能够优雅地运行。 6. 性能优化:考虑到数据库查询性能,可能需要使用索引、缓存技术(如 Ehcache)或预加载策略。此外,合理使用线程可以...

    员工信息管理系统(javaSwing)

    - 异常处理:捕获并处理可能出现的异常情况,如数据库连接失败、数据格式错误等。 - 权限控制:根据用户角色分配不同的操作权限,避免未经授权的访问和修改。 - 数据验证:在信息录入时进行数据校验,确保输入的合法...

    java swing 皮肤包

    同时,为了确保程序的稳定运行,需要进行异常处理,以防在加载或应用皮肤时出现错误。 在实际操作中,开发者可能需要执行以下步骤来应用Swing皮肤: 1. 导入所需的皮肤库:首先,你需要将提供的皮肤库(jar文件)...

    图书管理系统(JavaSwing)

    - **异常处理**: 对可能抛出的异常进行捕获和处理,保证程序稳定运行。 4. **Swing应用开发工具** - **Eclipse** 或 **IntelliJ IDEA**: 这些集成开发环境提供了内置的Swing GUI构建工具,如Eclipse的Window...

    java swing学生请假系统

    6. **异常处理**:为了提高程序的健壮性,开发人员会在关键位置加入异常处理代码,捕获可能出现的错误并提供适当的反馈,防止程序因意外情况而崩溃。 7. **用户验证与权限控制**:在学生请假系统中,可能实现了用户...

    图书管理系统(java) Swing版

    6. **异常处理**:在处理用户输入或数据库操作时,可能出现各种异常情况,良好的异常处理机制能确保程序稳定运行。开发者需要学会使用try-catch语句,对可能出现的异常进行捕获和处理。 7. **事件监听器**:Swing中...

Global site tag (gtag.js) - Google Analytics