jeffhao | 5d1ac92 | 2011-09-29 17:41:15 -0700 | [diff] [blame] | 1 | // Copyright 2006 The Android Open Source Project |
| 2 | |
| 3 | /** |
| 4 | * Test the uncaught exception handler. |
| 5 | */ |
| 6 | public class Main { |
| 7 | public static void main(String[] args) { |
| 8 | testThread(1); |
| 9 | testThread(2); |
| 10 | testThread(3); |
| 11 | |
| 12 | catchTheUncaught(1); |
| 13 | } |
| 14 | |
| 15 | private static void testThread(int which) { |
| 16 | Thread t = new Helper(which); |
| 17 | t.start(); |
| 18 | |
| 19 | try { |
| 20 | t.join(); |
| 21 | } catch (InterruptedException ex) { |
| 22 | ex.printStackTrace(); |
| 23 | } |
| 24 | } |
| 25 | |
| 26 | static void catchTheUncaught(int which) { |
| 27 | ThreadDeathHandler defHandler = new ThreadDeathHandler("DEFAULT"); |
| 28 | ThreadDeathHandler threadHandler = new ThreadDeathHandler("THREAD"); |
| 29 | |
| 30 | System.out.println("Test " + which); |
| 31 | switch (which) { |
| 32 | case 1: { |
| 33 | Thread.setDefaultUncaughtExceptionHandler(defHandler); |
| 34 | break; |
| 35 | } |
| 36 | case 2: { |
| 37 | Thread.currentThread().setUncaughtExceptionHandler( |
| 38 | threadHandler); |
| 39 | break; |
| 40 | } |
| 41 | case 3: { |
| 42 | Thread.setDefaultUncaughtExceptionHandler(defHandler); |
| 43 | Thread.currentThread().setUncaughtExceptionHandler( |
| 44 | threadHandler); |
| 45 | break; |
| 46 | } |
| 47 | } |
| 48 | |
| 49 | throw new NullPointerException("Hi diddly-ho, neighborino."); |
| 50 | } |
| 51 | |
| 52 | private static class Helper extends Thread { |
| 53 | private int which; |
| 54 | |
| 55 | public Helper(int which) { |
| 56 | this.which = which; |
| 57 | } |
| 58 | |
| 59 | public void run() { |
| 60 | catchTheUncaught(which); |
| 61 | } |
| 62 | } |
| 63 | } |