当前位置: 首页 > 面试题库 >

this.getClass()。getClassLoader()。getResource(“…”)和NullPointerException

闾丘博超
2023-03-14
问题内容

我在Eclipse Helios中创建了一个带有单个子模块的最小Maven项目。

src / test / resources文件夹中,我放置了一个文件“ install.xml”。在文件夹src / test / java中,我创建了一个包含单个类的包,该类执行以下操作:

  @Test
  public void doit() throws Exception {
    URL url = this.getClass().getClassLoader().getResource("install.xml");
    System.out.println(url.getPath());

  }

但是当我将代码作为junit 4单元测试运行时,我只是得到了NullPointerException。以前,这已经工作了一百万次了。有任何想法吗?

我遵循了此指南:

http://www.fuyun.org/2009/11/how-to-read-input-files-in-maven-junit/

但仍然出现相同的错误。


问题答案:

使用时

this.getClass().getResource("myFile.ext")

getResource将尝试查找相对于包的资源。如果您使用:

this.getClass().getResource("/myFile.ext")

getResource 会将其视为绝对路径,并像完成操作一样简单地调用类加载器。

this.getClass().getClassLoader().getResource("myFile.ext")

之所以不能/ClassLoader路径中使用前导,是因为所有ClassLoader路径都是绝对的,因此路径中的/第一个字符不是有效的。



 类似资料:
  • 问题内容: 我有这个测试应用程序: 当我从Eclipse运行它时,出现错误: 类路径(来自.CLASSPATH文件) 在我的c:\ project \ src文件夹中,我只有Test.java文件和包含pacman.png的’assets’目录。 我在做什么错以及如何解决? 问题答案: 我会这样: “ /assets/pacman.png”是绝对位置,而“ assets / pacman.png”

  • 问题内容: 我正在尝试提高Java的优化技能。为了做到这一点,我有一个旧的程序,我正在尽力使它变得更好。在此程序中,我使用SL4J进行日志记录。要获取记录器,我需要执行以下操作: 在编写代码时,我认为这是最好的选择,因为我删除了对类名(可以重构)的引用。但是现在我不太确定了… 另一方面,保留对类名的引用,但它删除一个方法调用。对于一个班级来说,这可能并不是一个很大的进步,但是当您有很多班级时,这可

  • 问题内容: 我有一些调用的代码。 不过,这将返回null。 当我从命令行而不是从Eclipse启动相同的代码时,它将返回一个类加载器。 我可以破解代码来做到这一点… 两者都被编译并使用相同的JVM运行。(我确定99.99%)。 任何人都知道为什么第一个会为类加载器返回null? 编辑: 我的问题是:“没有人知道为什么同一类通过Eclipse启动时会返回null,而从命令行加载时会返回类加载器。”

  • 问题内容: 说我有一些Java代码: 还有一些代码可以加载: 能永远?为什么/为什么不呢?如果是这样,在什么情况下? 问题答案: 根据此方法javadoc: 返回该类的类加载器。一些实现可能使用null来表示引导类加载器。如果此类是由bootstrap类加载器加载的,则此方法在此类实现中将返回null。

  • 当我尝试从eclipse中的资源目录加载一个图像时,我总是得到一个空指针异常(null pointer exception,NPE)。res文件夹位于项目目录中。这是我得到NPE的地方: 当我移除getClass().getReource()时,将返回图像: 当我打印res目录的URL时,我得到null: 谢谢