InvocationTargetException异常

Posted hapday

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了InvocationTargetException异常相关的知识,希望对你有一定的参考价值。

package com.smbea.demo.reflect;

/**
 * 越界异常
 * @author hapday
 * @date 2017年1月20日 @time下午7:59:01
 */
public class OverstepBoundaryException extends Exception {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	private String message;
	
	public String getMessage() {
		return message;
	}

	public OverstepBoundaryException(String message) {
		this.message = message;
	}
	
}



package com.smbea.demo.reflect;

public class B {
	public void say(int cursor) throws OverstepBoundaryException{
		double number [] = new double[5];

		for(int index = 0; index < 5; index++) {
			number[index] = Math.random();
		}

		if(0 > cursor) {
			throw new OverstepBoundaryException("数组索引不可以小于 0!");
		}
		if(4 < cursor) {
			throw new OverstepBoundaryException("数组索引不可以大于 5!");
		}
		
		System.out.println("cursor = " + cursor + ", number[" + cursor + "] = " + number[cursor]);
	}
}



package com.smbea.demo.reflect;

/**
 * 当被调用的方法内部出现了异常,而未被捕获时,将由 InvocationTargetException 异常来接收
 * @author hapday
 * @date 2017年1月20日 @time下午8:21:04
 */
public class A {
	public void print(int length) throws OverstepBoundaryException {
		B b = new B();
		b.say(length);
	}
}



package com.smbea.demo.reflect;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * InvocationTargetException 异常的抛出通常是一个方法调用另一个方法时,都未捕获方法中的异常
 * @author hapday
 * @date 2017年1月20日 @time下午8:16:50
 */
public class Test {
	public static void main(String[] args) {
		try {
			Class<?> clazz = Class.forName("com.smbea.demo.reflect.A");
			try {
				Method method = clazz.getMethod("print", int.class);
				try {
					method.invoke(clazz.newInstance(), 5);
				} catch (IllegalAccessException e) {
					e.printStackTrace();
				} catch (IllegalArgumentException e) {
					e.printStackTrace();
				} catch (InvocationTargetException e) {
					System.out.println("此处接收了方法内部未被捕获的异常。");
					e.printStackTrace();
				} catch (InstantiationException e) {
					e.printStackTrace();
				}
			} catch (NoSuchMethodException e) {
				e.printStackTrace();
			} catch (SecurityException e) {
				e.printStackTrace();
			}
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
}




package com.smbea.demo.reflect;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * InvocationTargetException 异常的抛出通常是一个方法调用另一个方法时,都未捕获方法中的异常
 * @author hapday
 * @date 2017年1月20日 @time下午8:16:50
 */
public class Test2 {
	public static void main(String[] args) {
		try {
			Class<?> clazz = Class.forName("com.smbea.demo.reflect.A");
			try {
				Method method = clazz.getMethod("print", int.class);
				try {
					method.invoke(clazz.newInstance(), -1);
				} catch (IllegalAccessException e) {
					e.printStackTrace();
				} catch (IllegalArgumentException e) {
					e.printStackTrace();
				} catch (InvocationTargetException e) {
					System.out.println("此处接收了方法内部未被捕获的异常。");
					Throwable throwable = e.getTargetException();
					throwable.printStackTrace();
				} catch (InstantiationException e) {
					e.printStackTrace();
				}
			} catch (NoSuchMethodException e) {
				e.printStackTrace();
			} catch (SecurityException e) {
				e.printStackTrace();
			}
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
}

  当被调用的方法内部出现了异常而未被捕获时,将由 InvocationTargetException 异常来接收。

以上是关于InvocationTargetException异常的主要内容,如果未能解决你的问题,请参考以下文章

引起:java.lang.reflect.InvocationTargetException

InvocationTargetException 在适配器类中膨胀视图

什么可能导致 java.lang.reflect.InvocationTargetException?

GWT:在进行服务器调用时获取 InvocationTargetException

java.lang.reflect.InvocationTargetException 怎么解决

JavaFX使用Gluon SceneBuilder InvocationTargetException