【问题标题】:Get path of the image and load it with BufferedImage获取图像的路径并使用 BufferedImage 加载它
【发布时间】:2014-09-11 16:02:32
【问题描述】:

我不知道为什么在 Java 中它应该如此复杂,但我已经为此花费了好几个小时。我在 \src\resources\resize-cursor.png

中有一个 png 图像

现在,我想将此图像与BufferedImage 类一起使用

BufferedImage myPicture = null;

try {
    // this is just one of the examples I tried... I've already tried like 10 ways to achieve this but I am always getting NullReferenceException
    myPicture = ImageIO.read(getClass().getResourceAsStream("\\resources\\resize-cursor.png")));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

是否有一种方法可以在我的应用中链接 png 资源?

【问题讨论】:

  • 看起来斜线方向是相反的方向。尝试这样做:"/resources/resize-cursor.png"。我不知道这是否可行,这就是为什么我将其作为评论留下。当我通过getResourceAsStream 加载资产时,我一直都是这样做的。
  • 你试过 myPicture = ImageIO.read(getClass().getResourceAsStream("/resize-cursor.png"))) 吗?
  • JavaDoc 对此非常明确:docs.oracle.com/javase/7/docs/api/java/lang/…,所以我猜 rayryeng 是正确的。

标签: java filepath image-loading


【解决方案1】:

你试过getClass().getResourceAsStream("/resources/resize-cursor.png")吗?

【讨论】:

    【解决方案2】:

    用 7zip 打开 jar 或者你可以在 IDE 中打开它。

    然后搜索文件。我的猜测:/resources 是顶级目录。

    myPicture = ImageIO.read(getClass().getResourceAsStream("/resize-cursor.png")));
    

    使用斜杠 / 表示区分大小写的路径。

    确保getClass() 的类在同一个jar 中。想想继承可能会做什么。 你也可以这样做:

    myPicture = ImageIO.read(ClassInJar.class.getResourceAsStream("/resize-cursor.png")));
    

    【讨论】:

      【解决方案3】:

      我认为问题在于您使用了 2 个斜杠,而且它们是错误的方式。使用此“/”代替“\”或“\”。如果您将资源文件夹设为类文件夹,也可能会有所帮助。

      如果您想了解更多信息,这里有 2 个链接: 1.Oracle tutorial on BufferedImage 2.Documentation of BufferedImage

      我喜欢加载图像的方式是创建一个类,使其像这样更简单。

      public class BufferedImageLoader {
      
          private BufferedImage image;
      
          public BufferedImage loadImages(String path) {
              try { image = ImageIO.read(getClass().getResource(path)); } 
              catch (IOException e) { e.printStackTrace(); }
              return image;
          }
      
      }
      

      并使用此加载“bufferedImage”。

      BufferedImageLoader loader = new BufferedImageLoader();
      image1 = loader.loadImages("/image1.png");
      image2 = loader.loadImages("/image2.png");
      

      【讨论】:

        猜你喜欢
        • 2013-10-27
        • 1970-01-01
        • 2017-10-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-06
        • 1970-01-01
        • 2016-12-29
        • 1970-01-01
        相关资源
        最近更新 更多