3

私は以下を使用しています:

protected void onActivityResult(int requestCode, int resultCode, Intent data){
    super.onActivityResult(requestCode, resultCode, data);
    switch(requestCode){
        case EDIT_ADJUSTMENT:
            if(resultCode == RESULT_OK){
                try{
                    String adjustment = data.getStringExtra("adjustment");
                    adjustment = adjustment.replace(" ", "");
                    ClassLoader myClassLoader = ClassLoader.getSystemClassLoader();
                    String classNameToBeLoaded = "com.picpic.adjustments." + adjustment;
                    Class adjust = myClassLoader.loadClass(classNameToBeLoaded);
                }catch(Exception e){
                    String msg = e.getMessage();
                }
            }
        break;
    }
}

Class adjust = myClassLoader.loadClass(classNameToBeLoaded);到達すると、次の例外が発生します。java.lang.ClassNotFoundException: com.picpic.adjustments.ColorCorrect

のパッケージColorCorrectcom.picpic.adjustments

では、なぜそのエラーがスローされるのでしょうか。さらに情報が必要な場合はお知らせください。ありがとう!

4

2 に答える 2

3

これは、クラスをロードしようとしているクラスローダーにクラスが見えないためだと思います。

this.getClass().getClassLoader()の代わりに試すことをお勧めしますClassLoader.getSystemClassLoader()

Java には ClassLoader 階層があります。各クラスローダーには、クラスをロードするための異なるクラスパスがあります。ClassLoader.getSystemClassLoader()ロードしようとしているクラスはユーザー定義のクラスのように見えるため、メソッドによって返されたクラス ローダーから見えない可能性があります。(Java ClassLoader Hierarchy のグーグルを試すことができます。以前にこれについて知らなかった場合、このリンクが役立つ場合があります。)

于 2012-11-06T21:48:10.193 に答える
0

これは、問題を修正するために使用したコードです。

protected void onActivityResult(int requestCode, int resultCode, Intent data){
    super.onActivityResult(requestCode, resultCode, data);
    switch(requestCode){
        case EDIT_ADJUSTMENT:
            if(resultCode == RESULT_OK){
                String adjustment = data.getStringExtra("adjustment");
                adjustment = adjustment.replace(" ", "");
                try{
                    ClassLoader myClassLoader = Edit.this.getClass().getClassLoader();
                    String myPackage = Edit.this.getClass().getPackage().getName();
                    String classNameToBeLoaded = myPackage + ".adjustments." + adjustment;
                    Class adjust = myClassLoader.loadClass(classNameToBeLoaded);
                    Object whatInstance = adjust.newInstance();
                    adjust.getMethod("setBitmap", new Class[]{Bitmap.class}).invoke(whatInstance, new Object[]{Edit.this.stage.getImage()});
                    Bitmap bmp = (Bitmap)adjust.getMethod("applyFilter").invoke(whatInstance);
                    Edit.this.stage.setStageImage(bmp);
                    Edit.this.stage.showTopItems(bmp);
                }catch(Exception e){
                    String msg = e.getMessage();
                }
            }
            break;
    }
}
于 2012-11-06T21:48:00.683 に答える