web-dev-qa-db-ja.com

java.lang.IllegalArgumentException:input == null! ImageIO.readを使用して画像をbufferedImageとしてロードする場合

これはこのサイトで100回ほど尋ねられた質問ですが、私はそれらすべてを調べました。すべて解決されたにもかかわらず、解決策はどれも私にとってはうまくいきませんでした。

私のコードは次のようになります:

_public Button1(Client client, String imgName) {
    this.client = client;   

    try {
        this.icon = ImageIO.read(this.getClass().getResourceAsStream("/resources/" + imgName));
    } catch (IOException e) {
        e.printStackTrace();
    }
_

コードを実行すると、次のエラーが発生します。

_Exception in thread "main" Java.lang.IllegalArgumentException: input == null!
at javax.imageio.ImageIO.read(Unknown Source)
_

文字列imgNameは子クラスからコンストラクターに渡され、画像の名前です(例:image.png)。また、リソースフォルダーがプロジェクトフォルダーのルートにあり、Eclipseプロジェクトのソースフォルダーとして含まれていることも確認しました。また、System.getProperty("user.dir")が正しい場所を指すようにしました。また、getResourceAsStream()の代わりにgetResource()を使用してみましたが、それでも機能しません。

13
tyler

これを使ってみてください:-

this.icon = ImageIO.read(new FileInputStream("res/test.txt"));

ここで、resフォルダーは、srcフォルダーと同じレベルに存在します。また、気づいたら、スラッシュ/resフォルダ名が削除される前。

12
SudoRahul

これは「いや、ダァ!このサイトの多くの人にとって、リテラルJavaがいかにであるかを指摘することは常に重要です。特に.jarファイルの場合、大文字と小文字の区別が重要です。

プログラムをコンパイルしてから実行しても問題なく動作するが、ファイルを.jarすると突然この問題が発生する場合。あなたのフォルダ/ファイルとあなたのコードでの参照のCaseを必ず確認してください。 (同様に、それらが.jarにあることを確認してください)

これが同じ問題を検討しているすべての人に役立つことを願っています。

1
Carlson

私はまったく同じ問題を抱えていました。最初は「my_image.png」というパスを使用しましたが、機能しませんでした。そこで、あらゆる場所を検索して、このサイトに投稿された他のソリューションを試しましたが、どれも機能しませんでした。私はこれから私のコードを変更することで私の問題を解決しました

 image = ImageIO.read(SpriteSheet.class.getResourceAsStream("res/image.png"));

これに

 image = ImageIO.read(SpriteSheet.class.getResourceAsStream("/image.png"));

この質問が5年前に投稿されたとしても、これが役に立てば幸いです。

1
Sudo Nim

GetResourceAsStream()への引数として渡されるパスは、クラスパスセットに対して相対的である必要があります。これを変更してみてください

this.icon = ImageIO.read(this.getClass().getResourceAsStream("/resources/" + imgName));

this.icon = ImageIO.read(this.getClass().getResourceAsStream("resources/" + imgName));
1
Kishore

あなたはこれを試すことができます:

image = ImageIO.read(getClass().getResource("/resources/" + imgName));
0

これを試して:

this.icon = ImageIO.read(this.getClass().getResource("/resources/" + imgName));
0
PSR

以下を使用してみてください

this.icon = ImageIO.read(this.getClass().getResourceAsStream("../resources/" + imgName));
0
user1441664

リソースフォルダーはEclipseのクラスフォルダーですか?プロジェクト->プロパティ-> Javaビルドパス->ライブラリ->クラスフォルダーの追加...->(resフォルダーを選択)を右クリックして、クラスフォルダーとして追加します。