NoSuchMethodFound异常

时间:2013-06-13 16:58:08

标签: java

我不断收到此错误消息:

06-13 18:53:33.839: W/System.err(19893): java.lang.NoSuchMethodException: showIt
06-13 18:53:33.839: W/System.err(19893):    at java.lang.ClassCache.findMethodByName(ClassCache.java:247)
06-13 18:53:33.839: W/System.err(19893):    at java.lang.Class.getDeclaredMethod(Class.java:731)

我确定我的方法存在,我尝试从asynctask开始。 这是方法:

public static void showIt(String[] result) {

这是我尝试过的代码:

try {
            Class<?> p = Class.forName(executeClass);
            Object t = p.newInstance();

            Method m = p.getDeclaredMethod(executeMethod, p);
            m.invoke(t, result);
        } catch (Exception e) {
            e.printStackTrace();
        }

3 个答案:

答案 0 :(得分:1)

三个问题......

  • getDeclaredMethod第二个参数必须是showIt方法的参数类数组。

  • 因为该方法是静态的,所以将对象传递给invoke方法的第一个参数是没用的。

  • 因为调用方法是varargs,所以必须将结果包装到Object []中,以便作为例外传递。

最后,这是一个有效的代码snipet。

String[] result = new String[] { "res" };
Class<?> p = Class.forName(executeClass);

Method m = p.getDeclaredMethod("showIt", result.getClass());
m.invoke(null, new Object[] {result});

答案 1 :(得分:1)

鉴于executeClass = "YourClass"executeMethod = "showIt"p.getDeclaredMethod(executeMethod, p)正在尝试查找showIt(YourClass arg),但您有showIt(String[] arg)

尝试p.getDeclaredMethod(executeMethod, String[].class)

答案 2 :(得分:0)

你有两个错误:

  1. 你必须传递getDeclaredMethod作为第二个参数的参数类型,而不是你的类的类型(p)
  2. 因为你的方法是静态的,你必须传递null作为第一个参数来调用,而你不需要创建t实例。
  3. public class Main {
        public static void main(String[] args){
    
    
            try {
                Class<?> p = Main.class;
    
                String[] arguments = {"ciao"};
                Method m = p.getDeclaredMethod("showIt",String[].class);
    
                m.invoke(null, arguments);
    
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        public static void showIt(String[] result) {
            System.out.println(result[0]);
        }
    }