1

リフレクションを使用して、EqualizerクラスがAndroid OS 2.3以降で使用可能かどうかを確認し、使用可能な場合はそのクラスを使用します。ただし、「ExceptionInInitializerError」を含むクラッシュレポートが定期的に表示されます。スタックトレースは次のとおりです。

java.lang.ExceptionInInitializerError
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:234)
at java.lang.Class.forName(Class.java:181)
at com.myapp.EQ.<init>(SourceFile:16)
at com.myapp.mainAct.onCreate(SourceFile:209)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
at android.app.ActivityThread.access$1500(ActivityThread.java:117)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3687)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.UnsatisfiedLinkError: Cannot load library: reloc_library[1312]: 277 cannot locate '_ZN7android11AudioEffect25queryDefaultPreProcessingEiP19effect_descriptor_sPj'...

at java.lang.Runtime.loadLibrary(Runtime.java:455)
at java.lang.System.loadLibrary(System.java:554)
at android.media.audiofx.AudioEffect.<clinit>(AudioEffect.java:63)

そして、エラーがスローされるカスタムクラスは次のとおりです。

public class EQ{
    private Class<?> eqClass = null;

    public EQ(){
        if(Build.VERSION.SDK_INT >= 9){
            try {
                eqClass = Class.forName("android.media.audiofx.Equalizer"); 
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

したがって、クラッシュは「Class.forName」行で発生し、例外はすべてCatchブロックによってキャッチされる必要があります。なんでじゃないの?

これは散発的に発生し、過去2か月間に5つの異なるクラッシュレポートを受け取りました。

4

1 に答える 1

2

java.lang.ExceptionInInitializerErrorではないため、ブロックExceptionを使用してキャッチすることはできません。try catch

Javaのドキュメントによると、Error

代わりに、次のような特定のタイプのエラーをキャッチしてみてください。

catch (java.lang.ExceptionInInitializerError er)
于 2012-06-20T20:08:04.977 に答える