1

考虑以下类:

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。

另外,有没有更好的方法来做到这一点?(我只需要加载一次)

4

2 回答 2

2

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

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

如果您的意思是“应用程序资源”(由您提供的应用程序的 IE,而不是用户识别的图像)。那么答案通常是:来自类路径:EG

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

..我应该把它放在哪里?

/path/to运行时类路径上的 Jar 中。请注意,只要类路径正确,这也适用于开发(使用松散或“未压缩”的资源)。

于 2012-12-16T15:29:24.513 回答
-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因此您不能在病房后修改它们。
  • 如果要访问该字段,则可以使用字段的getter方法来获取字段值。
于 2012-12-16T10:21:24.597 回答