Chargement d'une ressource d'image

j'ai une erreur pour mon interface graphique. Essayer de définir l'icône de barre de titre puis être inclus dans un bocal Runnable.

BufferedImage image = null;
try {
    image = ImageIO.read(getClass().getClassLoader().getResource("resources/icon.gif"));
} 
catch (IOException e) {
    e.printStackTrace();
}

frame.setIconImage(image);

Voici l'erreur que j'obtiens:

Exception in thread "main" java.lang.IllegalArgumentException: input == null!
    at javax.imageio.ImageIO.read(Unknown Source)
    at GUI.<init>(GUI.java:39)
    at GUI.main(GUI.java:351)

l'image est dans le répertoire correct dont le dossier" resources " est la racine du dossier de projet

46
demandé sur Pshemo 2012-03-26 01:32:00

3 réponses

tout d'abord, changez cette ligne:

image = ImageIO.read(getClass().getClassLoader().getResource("resources/icon.gif"));

à ceci:

image = ImageIO.read(getClass().getResource("/resources/icon.gif"));

Plus d'infos , sur l'endroit où se trouve la différence entre les deux approches, peut être trouvé sur ce fil - Différentes manières de chargement d'une Ressource

Pour Eclipse:

Pour NetBeans:

Pour IntelliJ idée:

  • clic droit le dossier src du projet. Sélectionner Nouveau - > Paquet
  • sous dialogue Nouveau Paquet , tapez le nom du paquet, dites ressources . Cliquez sur OK
  • Droit Cliquez sur les ressources package . Sélectionner Nouveau -> Le Paquet
  • sous dialogue Nouveau Paquet , tapez le nom du paquet, dites images . Cliquez sur OK
  • sélectionnez maintenant l'image que vous voulez ajouter au projet, copiez-la. à Droite, cliquez sur ressources.paquet d'images , à l'intérieur du IDE , et Select Paste
  • utilisez le dernier lien pour vérifier comment accéder à ce fichier maintenant en code Java. Bien que pour cet exemple, on utilise

    getClass().getResource("/resources/images/myImage.imageExtension");

  • Press Shift + F10 , pour réaliser et exécuter le projet. Les dossiers ressources et images , seront créés automatiquement dans le dossier out .

si vous le faites manuellement:

exemple de CODE de référence rapide(bien que pour plus de détails, un petit lien de clarification supplémentaire):

package swingtest;

import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*;

/**
 * Created with IntelliJ IDEA.
 * User: Gagandeep Bali
 * Date: 7/1/14
 * Time: 9:44 AM
 * To change this template use File | Settings | File Templates.
 */
public class ImageExample {

    private MyPanel contentPane;

    private void displayGUI() {
        JFrame frame = new JFrame("Image Example");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        contentPane = new MyPanel();

        frame.setContentPane(contentPane);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    private class MyPanel extends JPanel {

        private BufferedImage image;

        public MyPanel() {
            try {
                image = ImageIO.read(MyPanel.class.getResource("/resources/images/planetbackground.jpg"));
            } catch (IOException ioe) {
                ioe.printStackTrace();
            }
        }

        @Override
        public Dimension getPreferredSize() {
            return image == null ? new Dimension(400, 300): new Dimension(image.getWidth(), image.getHeight());
        }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawImage(image, 0, 0, this);
        }
    }

    public static void main(String[] args) {
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                new ImageExample().displayGUI();
            }
        };
        EventQueue.invokeLater(runnable);
    }
}
61
répondu nIcE cOw 2017-05-23 11:53:50

les fichiers image doivent se trouver dans le répertoire resources/ dans votre pot, comme indiqué dans comment utiliser les icônes et ce exemple pour le répertoire nommé images/ .

6
répondu trashgod 2012-03-26 00:01:47

il y a un beaucoup plus facile pour charger et mettre une image comme icône de cadre:

frame.setIconImage(
    new ImageIcon(getClass().getResource("/resources/icon.gif")).getImage());

Et c'est tout :)! Vous n'avez même pas besoin d'utiliser un bloc "try-catch" car ImageIcon ne lance aucune exception déclarée. Et en raison de getClass().getResource() , il fonctionne à la fois à partir du système de fichiers et d'un bocal selon la façon dont vous exécutez votre application.

Si vous avez besoin de vérifier si l'image est disponible, vous pouvez vérifier si l'URL retourné par getResource() est null :

URL url = getClass().getResource("/resources/icon.gif");
if (url == null)
    System.out.println( "Could not find image!" );
else
    frame.setIconImage(new ImageIcon(url).getImage());
5
répondu icza 2014-04-22 13:16:59