1

次のエラー メッセージが表示され続けます。

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();
        }
4

3 に答える 3

1

与えられたexecuteClass = "YourClass"andexecuteMethod = "showIt"p.getDeclaredMethod(executeMethod, p)を見つけようとしてshowIt(YourClass arg)いますが、あなたは を持っていますshowIt(String[] arg)

試してみてくださいp.getDeclaredMethod(executeMethod, String[].class)

于 2013-06-13T17:05:12.823 に答える
0

ここで2つの間違いがあります:

  1. クラスのタイプではなく、getDeclaredMethod に引数のタイプを 2 番目のパラメーターとして渡す必要があります (p)
  2. メソッドは静的であるため、呼び出す最初のパラメーターとして null を渡す必要があり、t インスタンスを作成する必要はありません。

.

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]);
    }
}
于 2013-06-13T17:13:14.933 に答える