在java中动态加载类及其对象

在java中动态加载类及其对象,java,classloader,objectinputstream,Java,Classloader,Objectinputstream,我有一个类文件和该类的一个保存对象。我的java应用程序的库中没有这个类。当我尝试使用加载对象时,它给出了一个 然后我使用下面的代码 URLClassLoader classLoader = new URLClassLoader(new URL[]{classFile.getParentFile().toURI().toURL()}); classLoader.loadClass(classFile.getName().replace(".class", "")).newInstance()

我有一个类文件和该类的一个保存对象。我的java应用程序的库中没有这个类。当我尝试使用加载对象时,它给出了一个

然后我使用下面的代码

 URLClassLoader classLoader = new URLClassLoader(new URL[]{classFile.getParentFile().toURI().toURL()});
 classLoader.loadClass(classFile.getName().replace(".class", "")).newInstance();
 myClass= (MyClass) FileIOManager.readObject(classObj);
但是这个代码在读取对象时也给了我同样的异常。希望能有人帮我完成任务

MyClass没有包名


FileIOManager.readObject()是我创建用于读取对象的方法,它适用于库中包含类的其他对象。

我将创建的
FileIOManager
类中的
readObject()
方法更改为以下内容

public static Serializable readObject(String path) throws FileNotFoundException, IOException, ClassNotFoundException {
    return readObject(path, null);
}

public static Serializable readObject(String path, final ClassLoader classLoader) throws FileNotFoundException, IOException, ClassNotFoundException {
    Serializable obj;
    try (FileInputStream fis = new FileInputStream(path); ObjectInputStream ois = new ObjectInputStream(fis) {

        @Override
        protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException {
            if (classLoader == null) {
                return super.resolveClass(desc);
            }
            return Class.forName(desc.getName(), false, classLoader);
        }

    }) {
        obj = (Serializable) ois.readObject();
    }
    return obj;
}

您需要提供类的完整限定名,包括包。否则,将出现此异常。该类是在没有包名称的情况下创建的。我想这不是问题所在。你确定你的ObjectInputStream正在使用你的类加载器吗?OIS倾向于忽略当前线程的类加载器,而使用系统类加载器。请核实。
URLClassLoader classLoader = new URLClassLoader(new URL[]{classFile.getParentFile().toURI().toURL()});
myClass = (MyClass) FileIOManager.readObject(loc, classLoader);