java - 反射 java.lang.ClassNotFoundException

标签 java android

我正在使用以下内容:

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/

相关文章:

java - Spring 3 + Atmosphere 类型 AtmosphereResource 不是通用的

java - JPA + Spring 异常后回滚事务

php - 如何在Android中以较少的数据使用量从服务器获取消息?

android - FCM 推送通知在某些设备上不起作用

android - 800x480 H264 视频在某些设备上不工作

java - 类无法转换为 java.lang.Comparable

java - Oracle JDK 和 OpenJDK 之间的区别

java - JPA @MapsId 与 @JoinColumn(可更新=假,可插入=假)

android - 如何在android studio中比较或计算两个日期的差异

java - 如何在我的 Android 应用程序中编写 StreamReader 程序?