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 has a ClassLoader Hierarchy. Each Class Loader has different class path to load classes from. Since it seems the class you are trying to load is user defined one, it may be invisible to the Class Loader returned by ClassLoader.getSystemClassLoader() method. (You can try googling for Java ClassLoader Hierarchy. May be this link is useful if you did not know about this before.).

于 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 回答