我的代码在开发计算机上正常运行,但在生产环境中安装时会抛出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?
答案 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。
阅读以上内容。