首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NoSuchMethodFound异常

NoSuchMethodFound异常
EN

Stack Overflow用户
提问于 2013-06-14 00:58:08
回答 3查看 316关注 0票数 1

我一直收到这个错误消息:

代码语言:javascript
复制
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)

我确信我的方法是存在的,我尝试从一个异步任务开始。方法如下:

代码语言:javascript
复制
public static void showIt(String[] result) {

这是我尝试过的代码:

代码语言:javascript
复制
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();
        }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-14 01:00:17

三个问题。

第二个参数必须是invoke method.

  • Because的参数类的数组该方法是静态的,将对象传递给showIt的第一个参数是没有用的invoke方法是varargs,结果必须包装到Object[]中才能作为excepted传递。

最后,这里是一个有效的代码片段。

代码语言:javascript
复制
String[] result = new String[] { "res" };
Class<?> p = Class.forName(executeClass);

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

Stack Overflow用户

发布于 2013-06-14 01:05:13

在给定executeClass = "YourClass"executeMethod = "showIt"的情况下,p.getDeclaredMethod(executeMethod, p)试图找到showIt(YourClass arg),但您找到了showIt(String[] arg)

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

票数 1
EN

Stack Overflow用户

发布于 2013-06-14 01:13:15

这里有两个错误:

  1. 您必须将参数类型作为第二个参数传递给getDeclaredMethod,而不是您的类的类型(P)
  2. 。由于您的方法是静态的,因此您必须将null作为要调用的第一个参数传递,并且您不需要创建t实例。

代码语言:javascript
复制
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]);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17092844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档