如何将BufferedImage加载为资源以及在何处放置它?

时间:2012-12-16 10:16:41

标签: java image bufferedimage

考虑以下课程:

final public class ResourceLoader
{
    public BufferedImage bg;
    public BufferedImage tile;
    public ResourceLoader()
    {

    }
}

我的目标是能够像这样访问图像文件:

ResourceLoader res = new ResourceLoader();
// I can display res.bg and res.tile now.

我需要在构造函数中编写什么内容以及在哪里放置图像以便它们在调试期间和在.jar中打包之后都能工作?我正在使用Eclipse。

此外,还有更好的方法吗? (我只需加载一次)

2 个答案:

答案 0 :(得分:2)

问题实际上归结为“如何在应用程序的运行时类路径上访问资源?”。所以..

  

如何将BufferedImage作为资源加载..

如果您的意思是“应用程序资源”(I.E.由您提供,与应用程序一起提供,而不是由用户识别的图像)。然后答案通常是:从类路径:E.G。

this.getResource("/path/to/the.jpg");
  

..我在哪里放置它?

在运行时类路径的Jar中的/path/to处。请注意,只要类路径正确,这也可以在开发中使用(使用松散或“未经过调整的”资源)。

答案 1 :(得分:-1)

您想要分配一次,即加载一次,然后您可以执行以下类设计

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

final public class ResourceLoader {
    private final BufferedImage bg;
    private final BufferedImage tile;

    public ResourceLoader(BufferedImage bg, BufferedImage tile) {
        this.bg = bg;
        this.tile = tile;
    }

    public ResourceLoader() {
        try {
            bg = ImageIO.read(new File("images/image1.jpg"));
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            tile = ImageIO.read(new File("images/image2.jpg"));
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    public BufferedImage getBg() {
        return bg;
    }

    public BufferedImage getTile() {
        return tile;
    }
}

此处您的观点符合以下方式

  • 没有任何public setter方法,因此您无法在课堂外分配字段
  • 字段为privatefinal,因此您无法在病房后对其进行修改。
  • 如果要访问这些字段,则可以使用fileds的getter方法获取字段值。