You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已知类绝对路径,用URLClassLoader创建对象遇ClassNotFound异常求助

解决ClassNotFoundException的问题

咱们先拆解下你代码里的核心问题,一步步来修正:

  1. 类全限定名写错了
    你给出的类文件路径是/home/abc/Desktop/test/out/production/test/Rout,这里的/home/abc/Desktop/test/out/production/test/是类文件所在的根目录(也就是classpath的根),而Rout.class直接放在这个目录下,说明这个类没有包名。所以加载类时应该用纯类名"Rout",而不是你写的"test.out.production.test.Rout"——那个是文件系统的路径,不是类的包结构。

  2. 修正后的可运行代码示例
    调整类名参数,同时简化下URL转换的逻辑(Java 7+用Paths更简洁):

    import java.io.File;
    import java.net.URL;
    import java.net.URLClassLoader;
    
    public class ClassLoaderDemo {
        public static void main(String[] args) throws Exception {
            // 指定类文件所在的根目录
            File classRootDir = new File("/home/abc/Desktop/test/out/production/test/");
            URL classPathUrl = classRootDir.toURI().toURL();
            URLClassLoader customLoader = new URLClassLoader(new URL[]{classPathUrl});
            
            // 用正确的类名加载
            Class<?> routClass = customLoader.loadClass("Rout");
            // 创建类实例
            Object routInstance = routClass.getDeclaredConstructor().newInstance();
            
            customLoader.close(); // 记得关闭类加载器释放资源
        }
    }
    
  3. 额外需要注意的细节

    • 如果Rout类实际是有包名的(比如源代码里写了package com.myapp;),那你需要把classpath根改成/home/abc/Desktop/test/out/production/,然后加载类时用"com.myapp.Rout"——包结构要和文件系统的目录层级对应。
    • 检查Rout.class是否真的存在于指定目录,Linux系统下文件名大小写敏感,别把Rout写成rout了。

内容的提问来源于stack exchange,提问作者Anurag Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 11:32:51