如果cp不以冒号结束,为什么class.getClassLoader()会抛出空指针?

时间:2011-07-06 09:13:21

标签: java

我有以下代码

public static void main(String args[]) throws Exception {
ClassLoader sysClassLoader = Thread.currentThread().getContextClassLoader();

URL[] urls = ((URLClassLoader)sysClassLoader).getURLs();
    String cp = "";
    for(int i=0; i< urls.length; i++)
    {
        String ffile = (String) urls[i].getFile(); 
    }
}  

课程编写得非常好 - 但这是一个很大的问题。如果我以这种方式启动类,我会捕获一个空指针:

java -cp "foo.jar" FileUtils
Exception in thread "main" java.lang.NoClassDefFoundError: FileUtils

但是当我以这种方式开始时,一切都很好:

java -cp "foo.jar:" FileUtils
File:/home/u/wzhkit/java/foo.jar

为什么会这样,我该如何解决这个问题?

谢谢, 克里斯

1 个答案:

答案 0 :(得分:2)

这有点出乎意料。

我怀疑发生的事情是java未在您的JAR文件中找到FileUtils类。相反,我怀疑它是在当前目录中找到它,因为java命令将空类路径条目解释为当前目录。

这是意料之外的,因为根据online documentation,您应该使用“。”引用当前目录。


(注意:这只是一个理论......)