問題の説明
この例外は、Method.invoke(obj, args…)メソッドが使用され、メソッド内部の例外がキャッチされない場合に発生します。
解決策
この例外は、リフレクションを使用してメソッドを呼び出し、メソッド内の例外がキャッチされない場合に発生します。 try catch ブロックを使用して例外をキャッチし、処理することをお勧めします。
サンプルコード
public static void main(String[] args) {
try {
Class<?> clazz = Class.forName("com.alibaba.test");
Method method = clazz.getMethod("run", int.class);
method.invoke(clazz.newInstance(), -1);
} catch (InvocationTargetException e) {
System.out.println ("here an exception inside the called method occurs and is not caught");
e.printStackTrace();
}
}例:
java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at android.app.ActivityThread.pauseGC(ActivityThread.java:5525)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2324)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2471)
at android.app.ActivityThread.access$900(ActivityThread.java:175)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1308)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5602)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.UnsatisfiedLinkError: Native method not found: dalvik.system.VMRuntime.pauseGc:(Ljava/lang/String;)I
at dalvik.system.VMRuntime.pauseGc(Native Method)
... 15 moreこの例外のスタック情報に基づいて解決策を提供することはできません。 この例外は、Samsung Android バージョン 4.4.2 および 4.4.4 で発生するバグです。 原因は、ActivityThread ファイルの 5525 行目で ネイティブメソッドを呼び出すためにリフレクションを使用すると、関数が検出されないことです。 再描画中に GLSurfaceView が呼び出されると、新しいアクティビティによって 2 MB のジャンクデータが生成されますが、ガベージコレクションメカニズムによって収集されません。 約 30 分間ビデオを再生すると、メモリがいっぱいになり、クラッシュが発生します。pauseGc()ActivityThread ファイルの 5525 行目にあるネイティブ メソッド。再描画中に GLSurfaceView が呼び出されると、新しいアクティビティによって 2 MB のジャンク データが生成されますが、ガベージ コレクション メカニズムでは収集されません。約 30 分間ビデオを再生すると、メモリがいっぱいになり、クラッシュが発生します。
参照
https://docs.oracle.com/javase/7/docs/api/java/lang/reflect/InvocationTargetException.html