2

画像をロードするために使用しているコードは次のとおりです。

 ImageIO.read(SpriteSheet.class.getResource(path));

パスはリソースへのパスです。しかし、それはエラーになりますIllegalArgumentException。何が原因なのだろうと考えた結果、リソースをクラスと同じパスに追加する必要があるという結論に達しました。

bin フォルダー外の res フォルダーなど、別のフォルダーから画像を読み込むことは可能ですか? (コンパイルされたクラスを保持するフォルダー)

編集:だから私はいくつかのことをいじり、解決策にたどり着きました。しかし今、私は別の問題を抱えています。これが私のコードです

    File sheet = new File(SpriteSheet.class.getProtectionDomain().getCodeSource().getLocation().getPath());
URI uri = sheet.toURI();
    BufferedImage image = ImageIO.read(uri.toURL());

実行しようとすると、IIOException: Can't read Input File これは、実際に動作させることができないことを意味します。URL をコンソールに表示してデバッグを試みましたが、これが URL です。 が真ん中に来ますC:\Users\Amma\Abhijeet\Eclipse%20Workspace1\Test%20Game\bin%20ファイルにアクセスできず、決してアクセスできないことを意味します。とにかくこれを修正できますか?

ありがとう。

4

1 に答える 1

0

Class.getResourceリソースが見つからない場合、または呼び出し元がリソースを取得するための適切な権限を持っていない場合は、null を返します。のすべてのバリアントは、null 入力を受け取った場合に ImageIO.readをスローします。IllegalArgumentException

getResourceのドキュメントを参照して、指定されたリソース名から絶対リソース名を作成する方法と、リソースを検索するためのルールを理解してください。

権限がある限り、任意の場所から画像を読み取ることができます。 ImageIO.read メソッドは File、URL、または InputStream を受け入れるため、多くのオプションがあります。

于 2013-03-22T13:57:28.480 に答える