Java Crash捕捉

JVM爲我們提供了線程的未捕獲異常處理機制,通過ThreadsetUncaughtExceptionHandler(UncaughtExceptionHandler)方法

public void setUncaughtExceptionHandler(UncaughtExceptionHandler eh)

也可以通過靜態方法setDefaultUncaughtExceptionHandler(UncaughtExceptionHandler)

public static void setDefaultUncaughtExceptionHandler(UncaughtExceptionHandler eh)

CrashCaught類,可以設置未捕捉異常處理機制,併發出未處理異常

public class CrashCaught extends Thread {
    private boolean caught;

    public CrashCaught(boolean caught) {
        this.caught = caught;
    }

    @Override
    public void run() {
        System.out.println(getName());

        if (caught) {
            setUncaughtExceptionHandler(new MyUncaughtExceptionHandler());
        }

        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
        }

        throw new NullPointerException();
    }

}

MyUncaughtExceptionHandler類捕捉未處理異常

static class MyUncaughtExceptionHandler implements UncaughtExceptionHandler {
	String name;
	
	public MyUncaughtExceptionHandler() {
		this.name = Thread.currentThread().getName();
	}

	@Override
	public void uncaughtException(Thread t, Throwable e) {
		System.out.println("In Handler " + name);
		System.out.println("Thread name " + t.getName());
		e.printStackTrace();
	}		
}

main()方法設置默認UncaughtExceptionHandler

public static void main(String[] args) {
	Thread.setDefaultUncaughtExceptionHandler(new MyUncaughtExceptionHandler());
	
	new CrashCaught(false).start();
	
	try {
		Thread.sleep(3000);
	} catch (InterruptedException e) {
	}
	
	new CrashCaught(true).start();
}

如果設置了setDefaultUncaughtExceptionHandler(),會捕捉所有未處理異常,除非該線程已經設置了setUncaughtExceptionHandler()
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章