すべてのプロダクト
Search
ドキュメントセンター

Mobile Testing - Deprecated:java_lang_reflect_InvocationTargetException

最終更新日:Jan 17, 2025

問題の説明

この例外は、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