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 にパックされた後の両方で機能するようにするには、コンストラクター内に何を記述する必要があり、イメージをどこに配置する必要がありますか? 私はエクリプスを使用しています。

また、これを行うためのより良い方法はありますか?(一度だけロードする必要があります)

4

2 に答える 2

2

問題は、「アプリケーションのランタイム クラスパス上のリソースにアクセスする方法」に帰着します。そう..

BufferedImage をリソースとしてロードするにはどうすればよいですか?

「アプリケーション リソース」を意味する場合 (ユーザーによって識別される画像ではなく、アプリケーションと共に提供される IE)。答えは通常、次のとおりです。クラスパスから:EG

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

..そして、どこに置くのですか?

/path/toランタイム クラスパスの Jar 内。クラスパスが正しい限り、これは開発でも機能することに注意してください (緩いまたは「unjar されていない」リソースを使用)。

于 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 に答える