web-dev-qa-db-fra.com

java.lang.IllegalArgumentException: input == null! lors de l'utilisation de ImageIO.read pour charger l'image en tant qu'image tamponnée

C'est une question qui a été posée une centaine de fois sur ce site, mais je les ai toutes examinées et, même si elles étaient toutes résolues, aucune des solutions ne fonctionnait pour moi. 

Voici à quoi ressemble mon code:

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

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

Lorsque le code est exécuté, l'erreur suivante est générée:

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

La chaîne imgName est transmise au constructeur à partir d'une classe enfant et correspond au nom d'une image (par exemple, image.png). Je me suis également assuré que mon dossier de ressources se trouvait à la racine du dossier de projet et qu'il était inclus en tant que dossier source dans le projet Eclipse. Je me suis également assuré que System.getProperty("user.dir") pointe vers le bon emplacement. J'ai également essayé d'utiliser getResource () au lieu de getResourceAsStream (), mais cela ne fonctionne toujours pas.

13
tyler

Essayez d'utiliser ceci: -

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

où le dossier res est présent au même niveau que votre dossier src. De plus, si vous remarquez, la barre oblique / avant le nom du dossier res a été supprimée.

12
SudoRahul

Cela peut venir comme un "Non, Duh!" pour beaucoup sur ce site, mais il est toujours important de souligner le langage littéral de Java. La sensibilité à la casse est essentielle, surtout si vous avez un fichier .jar. 

Si votre programme fonctionne bien avec la compilation puis l'exécution, mais que ce problème se pose soudainement lorsque vous .jar vos fichiers. Assurez-vous de vérifier votre cas sur vos dossiers/fichiers et vos références dans votre code. (Ainsi que vous assurer qu'ils sont dans votre .jar)

J'espère que cela aidera tous ceux qui se retrouveront ici à examiner le même problème.

1
Carlson

Le chemin transmis en tant qu'argument à getResourceAsStream () doit être relatif au chemin de classe défini. Donc essayez de changer ceci

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

à 

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

Vous pouvez essayer ceci:

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

Essaye ça:

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

Essayez d'utiliser ce qui suit

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

J'ai eu exactement le même problème. J'ai utilisé le chemin "my_image.png" au début, mais cela n'a pas fonctionné. J'ai donc cherché partout et essayé les autres solutions publiées sur ce site, mais aucune d'entre elles n'a fonctionné. J'ai résolu le mien en changeant mon code de ce

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

pour ça

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

J'espère que cela aide, même si cette question a été postée il y a 5 ans.

0
Sudo Nim

Le dossier de ressources est-il un dossier de classe dans Eclipse? Faites un clic droit sur le projet -> Propriétés -> Chemin de construction Java -> Bibliothèques -> Ajouter un dossier de classe ... -> (sélectionnez le dossier res) et ajoutez-le en tant que dossier de classe.