gpt4 book ai didi

java - 加载外部类文件而不考虑类路径或包

转载 作者:行者123 更新时间:2023-12-01 10:05:18 25 4
gpt4 key购买 nike

我正在尝试从桌面目录中的某个已编译的类文件加载类对象。

我在程序中向 main 提供两个参数,该程序使用 URLClassLoader 从编译文件 TheClassToLoad.class 获取类的实例。

我在类加载程序的 Main 中:(args[0] 用于不相关的内容)

String classFile_FilePath = args[1];
String className = args[2];
URL classUrl = new URL(classFile_FilePath);
URLClassLoader ucl = new URLClassLoader(new URL[]{classUrl});

在项目目录中从 shell 运行此程序时:

Me:ClassLoadingProgramRootDir Me$ java com.company.Main argZero file:///Users/Me/Desktop/TheClassToLoad.class

我发现一个引发的异常:

Exception in thread "main" java.lang.ClassNotFoundException: TheClassToLoad.class

因此,Desktop/ 中有一个文件 TheClassToLoad.class,但 URLClassLoader 引发异常,但未提供调试所需的详细信息情况。

我是 Java 新手,并且知道通常需要像 com.company.Class 这样的类路径来引用基于包目录结构的类的真实类名。然而,在这种情况下,我只是要求 URLClassLoader 为位于计算机上某处的任意编译类文件提供类对象的实例。

最佳答案

对于 URLClassLoader,URL 应该是包含类+包结构的目录,而不是类文件本身。在您的情况下,它应该是 file:///Users/Me/Desktop/

loadClass 的参数应该是类的名称,而不是类文件的名称。在您的情况下,它应该是 TheClassToLoad

如果该类位于包中(例如,my.pkg.TheClassToLoad),那么您应该使用该类名作为 loadClass 的参数,并且 URLClassLoader 的 URL 仍应为根包结构(例如,如果文件是 file:///Users/Me/Desktop/my/pkg/TheClassToLoad.class<,则为 file:///Users/Me/Desktop/)。

关于java - 加载外部类文件而不考虑类路径或包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36521187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com