<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    qiyadeng

    專注于Java示例及教程
    posts - 84, comments - 152, trackbacks - 0, articles - 34

    Swing中異常處理

    Posted on 2008-07-29 11:18 qiyadeng 閱讀(1482) 評(píng)論(0)  編輯  收藏

     

    每個(gè)Java程序員都要處理異常,異常處理在應(yīng)用程序中起著重要的作用。在Java世界中,處理異常看上去不是那么簡(jiǎn)單,不僅僅是在異常發(fā)生的地方,優(yōu)雅的報(bào)告異常。

    使用ThreadGroup處理異常

    ThreadGroup類中在這個(gè)時(shí)候大部分方法已經(jīng)作廢了,但是該類還是很有用的。ThreadGroup類有一個(gè)方法uncaughtException(Thread,Throwable),意思是:當(dāng)線程組中的線程因?yàn)楫惓6K止時(shí),Java虛擬機(jī)調(diào)用該方法。這樣你可以考慮繼承ThreadGroup類來處理你應(yīng)用中沒有捕獲的異常。

    public class AppSpecificThreadGroup extends ThreadGroup {

    public void uncaughtException(Thread, Throwable) {

    // app specific error handling here

    // ex: if fatal, release resources

    // show user dialog

    }

    }

    這樣在你的應(yīng)用啟動(dòng)的時(shí)候,把你的線程加入到線程組(Thread group)中。

    public class ApplicationMain {
      public static void main(String[] args) {
        Runnable r = new ApplicationStarter(args);
        ThreadGroup g = new AppSpecificThreadGroup();
        Thread t = new Thread(g, r);
        t.start();
      }
      
      private static void doStart(String[] args) {
        // start application here...
      }
      
      private static class ApplicationStarter {
        private String[] args;
        ApplicationStarter(String[] args) {
          this.args = args;
        }
        
        public void run() {
          doStart(args);
        }
      }
    }

    使用Java5的Thread.UncaughtExceptionHandler

    當(dāng)認(rèn)識(shí)到ThreadGroup.uncaughtException(Thread,Throwable)方法的巨大作用時(shí),Sun團(tuán)隊(duì)在Java5版本站中增強(qiáng)了未捕獲的異常處理的功能,引入了Thread.UncaughtExceptionHandler接口,另外這個(gè)接口引入了兩個(gè)新的”Check points”用于處理異常。Thread類有兩個(gè)屬性-uncaughtExceptionHandler和defaultUncaughtExceptionHandler,它們有相應(yīng)的get/set方法。但是這兩個(gè)方法是不同的。讓我們看看處理異常的過程。

    n 使用uncaughtExceptionHandler為當(dāng)前線程處理異常。

    n 如果uncaughtExceptionHandler為空(null),使用線程組(如果用戶沒有顯示設(shè)置,線程組是uncaughtExceptionHandler的默認(rèn)實(shí)現(xiàn))。

    n 如果線程組是默認(rèn)的實(shí)現(xiàn),但是不是根線程組,將把錯(cuò)誤處理委派給父線程組。

    n 如果線程組是默認(rèn)的實(shí)現(xiàn),并且是根線程組,將使用線程(Thread)類上設(shè)置的defaultUncaughtExceptionHandler方法。

    n 如果在線程類沒有設(shè)置defaultUncaughtExceptionHandler,將調(diào)用Java5之前的ThreadGroup類中的未捕獲異常方法。

    實(shí)現(xiàn)Thread.UncaughtExceptionHandler接口看起來也像上面實(shí)現(xiàn)ThreadGroup接口。

    public class AppSpecificExceptionHandler implements Thread.UncaughtExceptionHandler {
      
     public void uncaughtException(Thread, Throwable) {
       // app specific error handling here
       // ex: if fatal, release resources
       //     show user dialog
     }
    }

    在應(yīng)用程序中插入如下:

    public class ApplicationMain {
     public static void main(String[] args) {
      Thread.setDefaultUncaughtExceptionHandler(new AppSpecificExceptionHandler());
     }
    }

    Swing異常處理實(shí)現(xiàn)

    許多人沒有注意到現(xiàn)有的JOptionPanel類,該類中有許多的優(yōu)美的彈出對(duì)話框的靜態(tài)方法(showOptionDialog,showConfirmDialog,showInputDialog,和showMessageDialog),這些方法接受的參數(shù)不僅僅是字符串。這些靜態(tài)方法(也包括JOptionPanel構(gòu)造函數(shù))都是接受一個(gè)Object作為參數(shù)的的。下面是一個(gè)實(shí)現(xiàn)該類的核心代碼:

    public class ErrorDialog {

    public ErrorDialog() {

    super();

    }

    public static void showQuickErrorDialog(JFrame parent, Exception e) {

    final JTextArea textArea = new JTextArea();

    textArea.setFont(new Font("Sans-Serif", Font.PLAIN, 10));

    textArea.setEditable(false);

    StringWriter writer = new StringWriter();

    e.printStackTrace(new PrintWriter(writer));

    textArea.setText(writer.toString());

    JScrollPane scrollPane = new JScrollPane(textArea);

    scrollPane.setPreferredSize(new Dimension(350, 150));

    JOptionPane.showMessageDialog(parent, scrollPane,

    "An Error Has Occurred", JOptionPane.ERROR_MESSAGE);

    }

    }

    在程序中的一個(gè)例圖如下:

    clip_image002


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
    博客園   IT新聞   Chat2DB   C++博客   博問  
     
    主站蜘蛛池模板: 亚洲人成自拍网站在线观看| 亚洲天堂视频在线观看| 亚洲gay片在线gv网站| 国产精品69白浆在线观看免费| 亚洲精品线在线观看| 在线免费观看国产| 久久久久久亚洲Av无码精品专口| 久久成人免费播放网站| 亚洲精品视频在线免费| 91久久精品国产免费直播| 亚洲伦理一二三四| 成年女性特黄午夜视频免费看| 亚洲愉拍一区二区三区| 国产无遮挡色视频免费视频| AV激情亚洲男人的天堂国语| 亚洲天堂免费在线视频| 十八禁在线观看视频播放免费| 亚洲国产精品人久久| 无码人妻精品中文字幕免费东京热| 亚洲国产中文在线视频| 国产色爽女小说免费看| 97超高清在线观看免费视频| 亚洲午夜在线电影| 永久免费AV无码国产网站| 黄色a级免费网站| 亚洲AV无码久久精品狠狠爱浪潮| 16女性下面无遮挡免费| 亚洲AV无码一区二区三区电影| 亚洲国产成人精品无码久久久久久综合| 91成人免费福利网站在线| 亚洲成AV人综合在线观看| 午夜a级成人免费毛片| 人碰人碰人成人免费视频| 久久久久亚洲AV无码永不| 午夜神器成在线人成在线人免费 | 亚洲一区二区三区不卡在线播放| 韩国欧洲一级毛片免费| 国产在线观看免费av站| 亚洲中文字幕AV在天堂| 国产亚洲精品成人AA片新蒲金| 四虎免费影院ww4164h|