【问题标题】:getClass().getResource doesn't find image filegetClass().getResource 找不到图像文件
【发布时间】:2018-05-23 21:15:10
【问题描述】:

我的类 IntroState.java 有以下路径:

Project/src/GameState/IntroState.java

我的图片位于:

Project/Resources/Images/logo.png

文件夹 Resources 是一个源文件夹。我使用 Eclipse 氧气。

我尝试加载它:

new BufferedImage image = ImageIO.read(getClass().getResource("/Images/logo.png");

当我运行它时,我得到一个NullPointerException。 这段代码在一个较旧的项目中运行良好,但我的笔记本电脑死了,我不得不重新安装 Eclipse 并重做我的代码,从那以后它就停止了工作。 有人看到问题了吗? 我尝试了很多不同的路径,我觉得我的一些 Eclipse 设置可能是错误的。

【问题讨论】:

  • 如果没有真正看到它的结构或设置,很难判断你的项目出了什么问题。也许您需要使用一些清除/重建选项?如果这无济于事,请查看有关加载资源的问题:Loading image resource,Eclipse 将我们指向Runnable JARs missing Images/Files (Resources)
  • Eclipse 项目设置的 Java 构建路径中是否包含 Resources 目录?
  • 查看 jar(zip 格式)以找到 /Images/logo.png。区分大小写。将文件夹标记为源文件夹应该已经完成​​了,IntroState.class.getResource("/Images/logo.png").
  • 如问题中所述,“资源”文件夹作为源文件夹包含在构建路径中。我还多次重建了项目。

标签: java eclipse classloader


【解决方案1】:

它将根据班级的位置搜索图像。由于在 Project/src 中找到了 GamesState.Introstate 类(实际上在 Eclipse 中它可能在 Project/bin 中找到),当您使用路径时,它将在 Project/src/Images/logo.png 中查找图像 /Images/logo.png

【讨论】:

  • 我已经在使用相同的文件夹结构和“资源”中使用 getClass().getResource("/images/logo.png"); 找到了类似的东西;
  • docs.oracle.com/javase/7/docs/api/java/lang/… :在委托之前,使用此算法从给定的资源名称构造绝对资源名称:如果名称以'/'('\u002f')开头,则绝对名称资源的名称是在“/”之后的名称部分。否则,绝对名称的格式如下: modified_pa​​ckage_name/name 其中 modified_pa​​ckage_name 是此对象的包名称,用 '/' 代替 '.' ('\u002e')。
  • 为了找到它,它必须在类路径上。如果你不知道类路径是什么,你需要一个基本的 java 教程。因此,它根本不能在 Project/Resources 中,因为它的任何部分都不是类路径的一部分。因此,将其移动到 src 下的某个位置,然后使用您为其调用 getResource() 的类的类路径条目中的绝对路径或相对路径
  • 如果你把它放在 GameState 中,并且你使用 IntroState 作为 getResource() 的类,那么“/GameState/logo.png”或“logo.png”都可以工作
【解决方案2】:

您应该将文件作为流读取

尝试使用:

getClass().getClassLoader().getResourceAsStream("Images/logo.png")

或者

getClass().getClassLoader().getResource("Images/logo.png")

【讨论】:

  • 我仍然得到 NullPointerException
  • @Nafta 对不起。之前有一个错误。您是否尝试过更新版本的答案?您不应该在路径前面附加“/”
  • 我尝试了使用和不使用“/”以及使用和不使用“getClassLoader()”的两种方法。它总是抛出一个错误。
猜你喜欢
  • 2013-11-30
  • 1970-01-01
  • 2012-12-14
  • 2016-08-12
  • 1970-01-01
  • 2013-01-13
  • 1970-01-01
相关资源
最近更新 更多