MyClass.class.getClassLoader()。getResource(“”)。getPath()抛出NullPointerException

时间:2013-10-11 09:18:33

标签: java classloader

我的代码在开发计算机上正常运行,但在生产环境中安装时会抛出NullPointerException。抛出异常的行如下:

MyClass.class.getClassLoader().getResource("").getPath();

所以我将它分成多行代码,以确切地看到哪个调用返回null,如下所示:

ClassLoader cl = MyClass.class.getClassLoader();
URL url = cl.getResource("");
String path = url.getPath();

现在url.getPath()调用抛出了NullPointerException,这意味着cl.getResource(“”)返回null。

有谁能告诉我这个电话怎么会返回null?

4 个答案:

答案 0 :(得分:3)

在javadocs中明确地说ClassLoader#getResource(String name)方法。

  

返回:   用于读取资源的URL对象,如果是,则为null   无法找到资源或调用者没有足够的资源   获得资源的特权。

显然,没有名称为""的资源,因此会返回null

答案 1 :(得分:3)

getResource的实施对于不同的ClassLoader实施而言是不同的。

虽然这可能在本地计算机上可靠地运行,但不能保证在其他ClassLoader实现上成功。

因此,期望其他ClassLoader的行为方式不同(特别是如果您在Application Server,WebStart Launcher或任何具有某些安全限制的环境中执行该代码)。

答案 2 :(得分:0)

网址为null,因此您无法在其上调用getPath()。使用getResource参数调用""将会在我的理解中始终返回null,因此保证会爆炸。

答案 3 :(得分:0)

getClassLoader public ClassLoader getClassLoader() 返回类的类加载器。某些实现可能使用null来表示引导类加载器。如果此类由引导类加载器加载,则此方法将在此类实现中返回null。

阅读以上内容。