我现在项目很多地方要用到反射,我想问下大家 
我通过反射调用一个对象的方法,而这个方法里面有异常要处理
我用反射调用用就抓不到啦,只能够抓到  InvocationTargetException异常而被我反射调用的方法里的异常信息很重要,涉及到金融交易一些报错的信息,我必须要抓到,可是我现在用啦反射 无论怎样也没法子抓到啦大家帮我想想 办法啊,跪求大家解决,要不然,做出来这个项目可要失业啦!!!给100分悬赏!!!!!

解决方案 »

  1.   

    网上找到的,应该对你有用:Throwable targetEx = ((InvocationTargetException) e)
                        .getTargetException();
                if (targetEx != null)
                {
                    msg = targetEx.getMessage();
                }本篇文章来源于 IT中国 转载请以链接形式注明出处 网址:http://www.it86.cc/java/2008/0410/28100.shtml估计你是要这个Message
      

  2.   

    你catch到InvocationTargetException这后,再throw一个不就行了.
      

  3.   

    InvocationTargetException扔不出去,扔一个e.
      

  4.   

    try{
    //...
    }catch(InvocationTargetException ite){
      Exception e=ite;
      throw e;
    }这样不行吗?
      

  5.   

    已经解决了,这样的问题除了看API自己做试验  ,我才用java 一个月,我之前都是搞delphi的 这个项目很急,领导逼着我用java开发出来所以一时慌啦,因为整个底层都很可能出现这个问题
    public static void main(String args[]) throws ErrorExcp   {

        test  temp=new test();  //我在test函数里故意抛出来一个 ErrorMacket  异常,它的基类是ErrorExcp 
        
       

    try {

    reflectCall(temp,"errorDo",null,null);//自定义反射函数

    } catch (SecurityException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IllegalArgumentException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (NoSuchMethodException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IllegalAccessException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();



    catch (InvocationTargetException e) {

    Throwable targetEx = e.getTargetException(); 
                        
    try {
    throw targetEx;
    } catch (Throwable e1) {
    // TODO Auto-generated catch block
    System.out.print((ErrorMacket)(e1));

    System.out.println(e1.getClass().getName());//测试了下是预期的错误类型

     ErrorExcp error=  ErrorExcp.class.cast(e1);
                                                                            //这里还有点疑问不确定什么错误类型
                                                                                      //ErrorMacket是ErrorExcp 的子类,最后抓取的时候情况我感觉有下面几种情况
                                                                                        1.如果我 先catch  ErrorMacket  在catch ErrorMacket                                                                             是不是会被抓到2次?
                                                                                        2.我直接catch 一个ErrorMacket  类型,最后来个类型判断,判断什么
                                                                                          类型就转什么类型

                                                                                           
     throw  error; }

                         
    }



    }
      

  6.   

    该良啦下,无论转什么类型抛出  在子类中捉到了,基类也就没活干啦!public static void main(String args[]) throws ErrorExcp   {

        test  temp=new test();
        
       

    try {

    reflectCall(temp,"errorDo",null,null);

    } catch (SecurityException e) {

    e.printStackTrace();
    } catch (IllegalArgumentException e) {

    e.printStackTrace();
    } catch (NoSuchMethodException e) {

    e.printStackTrace();
    } catch (IllegalAccessException e) {

    e.printStackTrace();



    catch (InvocationTargetException e) {

    System.out.println(e);
    Throwable targetEx = e.getTargetException(); 
                        
    try {
    throw (ErrorExcp)targetEx;

    catch (ErrorMacket e2) {
    System.out.print("在匹配的子类中捕捉到");
    }
    catch (ErrorExcp e3)
    {

    System.out.println("在基类中被抓到啦");
    }

    catch (Throwable e1) {

    System.out.print((ErrorMacket)(e1));

    System.out.println(e1.getClass().getName());

        ErrorExcp error=  ErrorExcp.class.cast(e1);
     
       // throw  error; } } 
                         
    }



    }结果:10000110101nullnull  //这个是错误对象的序列化
    java.lang.reflect.InvocationTargetException
    在匹配的子类中捕捉到
      

  7.   

    e.getTargetException()就是你要的了...又抛了又接一下...打篮球啊。。
      

  8.   

    反射调用的速度比 new 出来对象直接调用的速度差不多慢 1000 倍!
      

  9.   

    =.=~ 那STRUTS框架里面不是也经常用反射的嘛
      

  10.   


    我不是new  我是反射调用函数和方法,经常用到的对象的Class 信息我都静态保存!