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