加载外部 class 文件而不考虑 class-路径或包
Loading external class files without regard to class-paths or packages
我正在尝试从位于我的桌面目录中的一些已编译的 class 文件加载 class 对象。
我在我的程序中向 main 提供了两个参数,该程序使用 URLClassLoader
从编译文件 TheClassToLoad.class
中获取 class 的实例。
我有,在class加载程序的主要部分:(args[0] is for something unrelated)
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
这样的 class 路径通常需要引用 class 的真实 class基于包目录结构的名称。然而,在这种情况下,我只是被要求 URLClassLoader
给我一个 Class 对象的实例,用于位于机器某处的任意编译的 class 文件。
对于URLClassLoader,URL 应该是包含class+包结构的目录,而不是class 文件本身。在你的情况下,它应该是 file:///Users/Me/Desktop/
.
loadClass 的参数应该是 class 的名称,而不是 class 文件的名称。在你的情况下,它应该是 TheClassToLoad
.
如果 class 在包中(例如 my.pkg.TheClassToLoad
),那么您应该使用 class 名称作为 loadClass 的参数,而 URL对于 URLClassLoader 应该仍然是包结构的根(例如,file:///Users/Me/Desktop
如果文件是 file:///Users/Me/Desktop/my/pkg/TheClassToLoad.class
)。
我正在尝试从位于我的桌面目录中的一些已编译的 class 文件加载 class 对象。
我在我的程序中向 main 提供了两个参数,该程序使用 URLClassLoader
从编译文件 TheClassToLoad.class
中获取 class 的实例。
我有,在class加载程序的主要部分:(args[0] is for something unrelated)
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
这样的 class 路径通常需要引用 class 的真实 class基于包目录结构的名称。然而,在这种情况下,我只是被要求 URLClassLoader
给我一个 Class 对象的实例,用于位于机器某处的任意编译的 class 文件。
对于URLClassLoader,URL 应该是包含class+包结构的目录,而不是class 文件本身。在你的情况下,它应该是 file:///Users/Me/Desktop/
.
loadClass 的参数应该是 class 的名称,而不是 class 文件的名称。在你的情况下,它应该是 TheClassToLoad
.
如果 class 在包中(例如 my.pkg.TheClassToLoad
),那么您应该使用 class 名称作为 loadClass 的参数,而 URL对于 URLClassLoader 应该仍然是包结构的根(例如,file:///Users/Me/Desktop
如果文件是 file:///Users/Me/Desktop/my/pkg/TheClassToLoad.class
)。