【发布时间】:2012-03-24 10:08:35
【问题描述】:
接下来是问题:我从here 获取了基类加载器代码。但是我的 classLoader 从某个角度来说是特定的,它必须能够从文件系统加载类(让我们以 WinOS 为例),所以在 classLoader 中必须有一些 setAdditionalPath() 方法,它设置路径(文件系统上的目录),来自我们将加载类(只有 *.class,没有 jars)。这是代码,它从链接修改加载器(您可以看到,只修改了 loadClass),但它不能正常工作:
public void setAdditionalPath(String dir) {
if(dir == null) {
throw new NullPointerException("");
}
this.Path = dir;
}
public Loader(){
super(Loader.class.getClassLoader());
}
public Class loadClass(String className) throws ClassNotFoundException {
if(Path.length() != 0) {
File file = new File(Path);
try {
// Convert File to an URL
URL url = file.toURL();
URL[] urls = new URL[]{url};
// Create a new class loader with the directory
ClassLoader cl = new URLClassLoader(urls);
ClassLoader c = cl.getSystemClassLoader();
Class cls = c.loadClass(className);
return cls;
} catch (MalformedURLException e) {
} catch (ClassNotFoundException e) {
}
}
return findClass(Path);
}
如果有人提供帮助,我将不胜感激:)
【问题讨论】:
-
您遇到了什么错误(如果有)。在几乎没有信息的情况下很难进行调试。
-
@Legend 首先我用一个目录设置路径值,其中有一些类。然后我用这个目录中的一个类调用类加载器,但它在其中一些行返回一个 NPE(NullPointerException)
ClassLoader cl = new URLClassLoader(urls); ClassLoader c = cl.getSystemClassLoader(); Class cls = c.loadClass(className); -
我不能说我的解决方案是正确的。我想要获得的主要结果是我的类加载器将能够从我在方法中设置的文件目录加载类,否则,将调用父类加载器。
-
不要忽略异常!对于每个
catch,添加e.printStackTrace()。盲目地尝试编程是没有好处的。 -
@AndrewThompson 我不会像您在代码中看到的那样忽略它们! NPE 被
Class cls = c.loadClass(className);线抛出
标签: java class url path classloader