我在我的代码中观察到一种奇怪的行为。 我有这段代码:
String propsPath = Resources.getResource(
"xyz.properties").getPath();
我总是得到这个错误
java.lang.IllegalArgumentException:找不到资源xyz.properties。
我第一次调用使用上面代码块的方法。在随后的调用中,该方法工作正常,并能够正确定位资源。在检查getResource
代码后,我可以看到
public static URL getResource(String resourceName) {
URL url = Resources.class.getClassLoader().getResource(resourceName);
checkArgument(url != null, "resource %s not found.", resourceName);
return url;
}
一旦调试肯定,第一次获得的url
为null
。相同的代码如何工作呢?
我在getClassLoader
返回类的类加载器。一些实现可能会使用 null表示引导类加载器。这个方法会返回 如果此类由引导程序加载,则在此类实现中为null 类加载器。
有人可以解释一下bootstrap class loader
是什么?我的代码是第一次使用相同的,但下次使用其他类加载器?或者这是一个完全不同的问题吗?
答案 0 :(得分:0)
您可能想尝试较新版本的番石榴。我不知道它是否可以解决您的问题,但不久前我们进行了更改以使用Thread.currentThread().getContextClassLoader()
,如果它存在而不是使用Resources.class.getClassLoader()
。
另请注意,getClassLoader()
未归还null
...如果是NullPointerException
,您将获得getResource("xyz.properties")
。 null
正在返回db.mycollection.find({ "_id": { "$nin": [ "id1","id2" ]}}, { "_id": 1 })
,这意味着它无法找到该资源。我不确定为什么它会对后续的电话起作用,但不是第一次......这很奇怪。