我正在使用以下内容:
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
ColorCorrect
的包是com.picpic.adjustments
那么,为什么会抛出该错误?如果您需要更多信息,请告诉我。谢谢!
最佳答案
我猜这是因为您的类对您尝试加载类的类加载器不可见。
我建议您尝试使用 this.getClass().getClassLoader()
而不是 ClassLoader.getSystemClassLoader()
。
Java 有一个 ClassLoader 层次结构。每个类加载器都有不同的类路径来加载类。由于您尝试加载的类似乎是用户定义的类,它可能对 ClassLoader.getSystemClassLoader()
方法返回的类加载器不可见。 (您可以尝试使用谷歌搜索 Java ClassLoader Hierarchy。如果您之前不知道这个 link 可能会有用。)
关于java - 反射 java.lang.ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13259329/