2

我的代码在开发机器上正确运行,但在生产环境中安装时抛出 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

4 回答 4

3

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

返回:用于读取资源的 URL 对象,如果找不到资源或调用者没有足够的权限来获取资源,则返回 null。

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

于 2013-10-11T09:22:57.273 回答
3

不同的实现getResource方式不同ClassLoader

虽然这可能在您的本地机器上可靠地工作,但不能保证在其他 ClassLoader 实现上成功。

所以期望其他类加载器表现不同(特别是如果您在应用程序服务器、WebStart 启动器或任何具有一些安全限制的环境中执行该代码)。

于 2013-10-11T10:38:36.930 回答
0

url 是null,所以你不能调用getPath()它。在我的理解中,getResource使用参数调用将始终返回 null,因此肯定会崩溃。""

于 2013-10-11T09:20:03.267 回答
0

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

阅读以上行。

于 2013-10-11T09:22:34.183 回答