Object b=m.invoke("test",null);//这里出错
错误有二
1。test 你是不是已经new出来了。
2。即使你前面都对了,m.invoke("test",null),第二个参数也不是null
因为Atest中有一个方法
    public void settestStr(java.lang.String str)你要有一个String 的参数

解决方案 »

  1.   

    treeroot(根根) 晕,你怎么是个只打雷不下雨的主儿啊。
      

  2.   

    我实在看不下去了,这样用反射!!!!!!!!!!!
    class ATest
       String testStr; 
       public void settestStr(java.lang.String str) {
            this.testStr = str;
       }
       public static void main(String[] args){
              String[] param=new String[]{"testStr"}; //这个是要设置的字符串
              Atest a=new Atest();
              java.lang.reflect.Method m=(Atest.class).getMethod("settestStr",new Class[]{String.class});
              Object b=m.invoke(a,param);
       System.out.println(a.testStr);
       }
    }
      

  3.   

    Atest a = new Atest();
    Class ca = a.getClass();
    Method method_n = ca .getDeclaredMethod("settestStr",class_n);//第二个参数是这个方法的返回类型你自己去写吧
    最后才
    method_n.invoke(a,ss);
    第二个参数是你要传的参数
      

  4.   

    Class[] c=new Class[1];  
              c[0]="".getClass();  //这种写法太不可思议了
    //上面两句相当于
    Class[] param=new Class[]{String.class};java.lang.reflect.Method m=Atest.getClass().getDeclaredMethod("settestStr",c);
    //这句怎么编译过的??Method m=(Atestc.class).getMethod("settestStr",c);Object b=m.invoke("test",null);//这里出错,这句怎么看都不顺眼Object result=m.invoke(new Atest(),param);
    第一个参数说明要在哪个实例调用该方法,第二个参数是该方法的参数列表
      

  5.   

    原来是我把参数搞混了。invoke第一个参数不是参数值。SORRY,大家,我没看好文档。另:c[0]="".getClass();
    我也觉得这种写法很搞笑,但是我起先在JBX里直接用String.class居然死活不让我编译过去,后来一怒只下就这样写了。java.lang.reflect.Method m=Atest.getClass().getDeclaredMethod("settestStr",c);
    为什么不能编译过去?我在JBX编译过N次了。哎。关键是懒得下载文档,JBX里的帮助文档也给我搞丢了。