当前位置: 首页 > 知识库问答 >
问题:

为什么ClassLoader.getResource("/pkg/readme.txt")总是返回null,资源名称带有前导斜杠?

呼延沈义
2023-03-14

我用谷歌搜索了很多,但仍然不明白为什么ClassLoader.getResource(“/pkg/readme.txt”)总是返回null?否则,如果没有前导斜杠,ClassLoader.getResource(“pkg/readme.txt”) 可以返回正确的 URL。

我确实理解类和类加载器中这些方法的区别。

注意:我不是在问类.get资源()和类加载器之间的区别,因为我明白了。我担心的是类加载器.getResource() 不适用于以前导斜杠开头的资源名称

共有2个答案

洪宇定
2023-03-14

类的getResource() -文档说明了不同之处:

该方法将调用委托给其类加载器,在对资源名称进行以下更改后:如果资源名称以“/”开头,则该名称不变;否则,在将“0”转换为“/”后,包名称将在资源名称前面。如果此对象是由引导加载程序加载的,则调用将委托给ClassLoader.getSystemResource。

Class.getResource() 和 ClassLoader.getResource() 之间有什么区别?

沃博裕
2023-03-14

我关心的是<code>类加载器。getResource()对于以斜杠开头的资源名称无效

这是因为没有以前导斜杠开头的资源名称。根据定义,资源名称是“标识资源的'/'分隔路径名” - 组件由斜杠分隔,而不是用斜杠分隔。

someClass.getResource(“/pkg/readme.txt”)等同于somesclass.getClassLoader()。getResource(“pkg/readme.txt”),前导斜杠不是资源名称的一部分,而是对类的指示。getResource,它不应该将类的包放在传递给类加载器的路径前面。没有前导斜杠:

someClass.getResource("pkg/readme.txt")

将等效于

someClass.getClassLoader().getResource("com/example/pkg/readme.txt")

(假设someClass在包com.example

 类似资料:
  • 我想获得我的本体的所有类。这是Protege创建的RDF/XML格式的本体文件的一部分: 我编写了这个查询,它在Protege中正常工作,但是当我在dotNetRDF中使用它时,它返回类的完整URI,而不仅仅是它的名称。 我预期的结果只是“Aqua”,但实际上是“http://www.w3.org/2002/07/owl#Aqua”。为什么会发生这种情况,我如何取回名称呢?

  • 我试图在JPanel上显示图片,但一直出现错误: Java语言lang.IllegalArgumentException:input==null! 我不明白发生了什么。 这是我正在使用的代码: 这只会导致我得到错误! 堆栈跟踪产生以下结果: 我如何解决这个问题?我已经检查了图像的位置,并且从不同的位置尝试,总是得到相同的错误! 我正在使用Netbean IDE。

  • 问题内容: 我有以下代码。应该返回表的最后一行的mysqli_insert_id()(在本例中为“ $ last_row”)始终返回0。为什么会这样呢? 问题答案: 并 没有 返回表的最后一排的ID。从文档中,它: …返回由查询产生的ID,该查询是对具有具有AUTO_INCREMENT属性的列的表进行的。如果最后一个查询不是or 语句,或者如果修改后的表没有带有属性的列,则此函数 将返回零 。 (

  • 问题内容: 我找到了JavaDoc的方法: 返回:如果此线程已被中断,则返回true;否则返回false。 否则为假。 我对这种方法的理解有误。此外,我可能会误解Thread中的“中断”概念。 欢迎任何解释!谢谢! 程式码片段: 在线程定义中: 调用: 问题答案: 引发异常后,线程不再处于中断状态。

  • 问题内容: 这是简单的代码,我没有得到设置位图的结果,而是得到了null。谁能告诉我我在哪里犯错了? 更新 好的,所以我无法像我想的那样将文本转换为图像。这样呢 这会创建位图吗? 问题答案: 从文档中: 返回 解码的位图;如果无法解码图像,则 返回 null。 字符串“ test”中涉及的字节不是有效的位图,对吗? 如果将文本“ test”保存在名为or 等的文件中,并试图在Windows中打开它

  • 问题内容: 我已经存储了在该数据库中插入并插入记录的过程。我想获取最后插入的记录的ID。返回NULL并返回正确的ID,为什么会发生?如我所读,因此最好在表上有一些触发器的情况下使用。我可以使用吗?不论触发器如何,它是否都在表的范围内返回ID? 那么问题是什么以及使用什么呢? 已编辑 问题答案: 就像奥德(Oded)所说的那样,问题在于您在执行之前要先询问身份。 作为解决方案,最好尽可能地接近运行。