InvocationTargetException.getTargetException()
解决方案 »
- 笨菜鸟求解各位大虾流问题第三季
- 关于double的输出精度
- Clob 转换成image
- 请问,jsp+mysql+tomcat网站中,如何加入RSS服务?
- 求助,一个简单的计算器程序 但是不能显示结果
- (求解)编写一个函数,把一个char(1 char=16bits) 分解成连个byte(1byte=8bits)。
- 将String转换为Color的方法
- 急!关于sdk环境配置的很奇怪的问题,大家帮帮我这个初学者吧。
- short a=2;//A是什么值?int or short,下面程序出错。
- 高分相送(2500),专家论坛左边的树是怎么弄的?你看看你自己想要多少,
- 怎么样把vector数组中的数据写到文件中去
- 关于JTree的问题
试试看InvocationTargetException.getTargetException()
即——在主流程中,不是找不出异常,而是根本没有异常。按理说JVM应该把invoke的执行异常打包进InvocationTargetException返回的,所以很是奇怪。这也可能是比较特殊的情况,我还没来得及仔细测试。希望有碰到过的兄弟指点一下。
楼主的意思应该是说程序中断后打在控制台上的异常.
怪我没说清楚,那个异常是invoke所调用的实际代码catch后print出来的。
我所谓的“其中实际的代码”就是这个意思,即不是主流程中的invoke。to whyxx(我也是新手) :
我的流程作为主框架模块通过反射调用了另一个同事的一个方法,他也有异常处理,所以那个异常信息是他的程序打到控制台的。但是我的程序(invoke)没有出现异常,也就不是你列出的那三种。to all:
我是想不管他的异常是什么,既然是通过我的invoke调用出现的异常,我的流程怎么会没有一点反应呢?
年底这几天极忙,还有更重要的一些其它问题没搞定,所以来麻烦各位啦。至于帖代码,我现在只能把我的代码贴出来,他的我拿不到。
(下面是一段反射操作封装,只改了后面的两条注释) private static Object doReflect(Pack code) throws Exception {
Class[] args = null;
Object[] vals = null;
int cnt = 0;
List list = code.list("para");
if (list != null) {
cnt = list.size();
args = new Class[cnt];
vals = new Object[cnt];
}
for (int i = 0; i < cnt; i++) {
Pack pack = (Pack)list.get(i);
String type = pack.getType();
String value = pack.getValue();
int dim = Tool.dimArray(type);//得到参数类型数组维数(0表示不是数组)
if (dim > 0) type = type.substring(0, type.indexOf("["));
type = Tool.typeName(type);//得到参数逻辑数据类型
args[i] = Tool.typeClass(type, dim);//得到参数的对象
//得到参数值
if (value.equals("null")) continue;
if (dim > 0) {//处理数组
String[] val = value.split(",");
Object ary = Array.newInstance(args[i], val.length);
for (int j = 0; j < val.length; j++) {
if (type.equals("str")) Array.set(ary,j, val[j]);
else if (type.equals("int")) Array.setInt(ary, j, Tool.s2n(val[j]));
else if (type.equals("bool")) Array.setBoolean(ary, j, Tool.s2b(val[j]));
else ;//其它(暂未处理)
}
vals[i] = ary;
} else vals[i] = Tool.newObject(type, value);
}
String class_name = code.getProp("class");
Class cls = null;
Object obj = null;
if (class_name.equals("")) {//DatabaseMetaData操作
obj = dbmd;
cls = obj.getClass();
} else {//系统其它函数或用户自定义函数(我碰到的问题走的是这儿)
cls = Class.forName(class_name);
obj = cls.newInstance();
}
Method method = cls.getMethod(code.getName(), args);
return method.invoke(obj, vals);//在这儿我同事的程序在控制台打出了异常信息
}(这是调用上述方法的代码,省略了无关流程)
try {
Pack exec = code.get("exec");
if (exec != null) {//内部函数
//......略掉
} else result = doReflect(code);//在这儿调用,但下面的两段catch都没有触发
} catch (InvocationTargetException e) {
throw new WorkException("命令执行失败", e.getTargetException());
} catch (Exception e) {
throw new WorkException("命令执行错误", e);
}
//......下面的代码接着走了,没问题
希望这次说得清楚了些,再有代码相关的解释问题各位尽管发话,多谢多谢!
没有再throw出来,我当然是截不到了!!!因为我当时问了那个同事,他也不是很清楚,所以我以为是我的问题。
但是他不清楚却又是因为他的程序里又调用了另外一个同事的代码,那个异常是第二个同事的程序处理了的。呵呵,给大家添乱了。过年好!散分!