web-dev-qa-db-fra.com

Comment puis-je ajouter une image à un projet Java avec eclipse?

J'ai beaucoup lu autour de SO et de liens Google.

Je n'ai pas encore compris comment ajouter correctement une image dans un projet d'interface graphique Eclipse de manière à ce que le système le reconnaisse. Je sais que CLASSPATH est un peu mumbojumbo, mais ce ne devrait probablement pas être aussi difficile à faire.

Permettez-moi de commencer par décrire ce que je fais ... (Si quelqu'un pouvait me corriger, ce serait apprécié.)

Voici ma méthode. 

J'ajoute l'image à l'aide de "l'Assistant d'importation" (clic droit, "Importer", "Général", "Fichier") dans un "répertoire d'importation" que j'ai appelé "/ ressources".

Eclipse crée automatiquement un dossier appelé "ressources" dans l'arborescence de l'explorateur de packages Eclipse. Juste sous l'entrée pour "Bibliothèques référencées".

Notez que "ressources" ne se trouve pas sous "Bibliothèques référencées", il est au même niveau dans l'arborescence.

J'utilise ensuite le code suivant:

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream input = classLoader.getResourceAsStream("/resources/image.jpg");
Image logo = ImageIO.read(input);

Et à ce stade, je lance le programme de test et reçois cette erreur:

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

Merci d'avance pour toute aide!

23
ct_

Placez l'image dans un dossier source , pas dans un dossier normal. C’est-à-dire: cliquez avec le bouton droit sur projet -> Nouveau -> Dossier source. Placez l'image dans ce dossier source. Ensuite:

InputStream input = classLoader.getResourceAsStream("image.jpg");

Notez que le chemin est omis. C'est parce que l'image est directement à la racine du chemin. Vous pouvez ajouter des dossiers sous votre dossier source pour le décomposer davantage si vous le souhaitez. Ou vous pouvez placer l'image dans votre dossier source existant (généralement appelé src).

35
Jeff

Si vous rencontrez toujours des problèmes lors de la recherche de fichiers par Eclipse, essayez les solutions suivantes:

  1. Vérifiez que le fichier existe conformément à l'environnement d'exécution actuel en utilisant la classe Java.io.File pour obtenir un format de chemin d'accès canonique et vérifiez que (a) le fichier existe et (b) quel est le chemin d'accès canonique.
  2. Vérifiez le répertoire de travail par défaut en imprimant ce qui suit dans votre répertoire principal: 

        System.out.println("Working dir:  " + System.getProperty("user.dir"));
    

Pour (1) ci-dessus, j'ai mis le code de débogage suivant autour du fichier auquel j'essayais d'accéder:

            File imageFile = new File(source);
            System.out.println("Canonical path of target image: " + imageFile.getCanonicalPath());
            if (!imageFile.exists()) {
                System.out.println("file " + imageFile + " does not exist");
            }
            image = ImageIO.read(imageFile);                

Pour une raison quelconque, j'ai fini par ignorer la plupart des autres publications m'indiquant de placer les fichiers image dans "src" ou une autre variante, car j'avais vérifié que le système examinait la racine de la hiérarchie des répertoires du projet Eclipse (par exemple, HOME/espace de travail/myProject).

Avoir les images dans src/(qui est automatiquement copié dans bin /) n'a pas suffi à Eclipse Luna.

0
rholmes

Il est très simple d’ajouter une image dans un projet et de l’afficher . Commencez par créer un dossier dans votre projet pouvant contenir n’importe quel type d’image.

Cliquez ensuite avec le bouton droit de la souris sur Projet ->>Accéder au chemin de construction ->> configurer le chemin de construction ->> ajouter un dossier de classe ->> choisissez votre dossier (que vous venez de créer pour stocker les images) sous le nom du projet. 

class Surface extends JPanel {

    private BufferedImage slate;
    private BufferedImage Java;
    private BufferedImage pane;
    private TexturePaint slatetp;
    private TexturePaint javatp;
    private TexturePaint panetp;

    public Surface() {

        loadImages();
    }

    private void loadImages() {

        try {

            slate = ImageIO.read(new File("images\\slate.png"));
            Java = ImageIO.read(new File("images\\Java.png"));
            pane = ImageIO.read(new File("images\\pane.png"));

        } catch (IOException ex) {

            Logger.`enter code here`getLogger(Surface.class.getName()).log(
                    Level.SEVERE, null, ex);
        }
    }

    private void doDrawing(Graphics g) {

        Graphics2D g2d = (Graphics2D) g.create();

        slatetp = new TexturePaint(slate, new Rectangle(0, 0, 90, 60));
        javatp = new TexturePaint(Java, new Rectangle(0, 0, 90, 60));
        panetp = new TexturePaint(pane, new Rectangle(0, 0, 90, 60));

        g2d.setPaint(slatetp);
        g2d.fillRect(10, 15, 90, 60);

        g2d.setPaint(javatp);
        g2d.fillRect(130, 15, 90, 60);

        g2d.setPaint(panetp);
        g2d.fillRect(250, 15, 90, 60);

        g2d.dispose();
    }

    @Override
    public void paintComponent(Graphics g) {

        super.paintComponent(g);
        doDrawing(g);
    }
}

public class TexturesEx extends JFrame {

    public TexturesEx() {

        initUI();
    }

    private void initUI() {

        add(new Surface());

        setTitle("Textures");
        setSize(360, 120);
        setLocationRelativeTo(null);        
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public static void main(String[] args) {

        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                TexturesEx ex = new TexturesEx();
                ex.setVisible(true);
            }
        });
    }
}
0
Sekhar

Vous pouvez réenregistrer l'image et trouver littéralement le fichier src de votre projet et l'ajouter à celui-ci lorsque vous enregistrez. Pour moi, je devais aller sur netbeans et trouver mon projet et quand cela se présente, il y avait 3 fichiers src était le dernier Ne cliquez sur aucun d'eux, sauvegardez votre photo ici. Cela devrait fonctionner. Maintenant, le redimensionnement peut être un problème différent et je travaille sur maintenant lol

0
cubanpete13

Si vous le faites dans Eclipse, il existe quelques notes rapides indiquant que, si vous survolez une classe dans votre script, une boîte de dialogue de mise au point indiquant que vous devez appuyer sur f2 s'affiche. 

pour les applications informatiques, utilisez ImageIcon. et pour le chemin dire: 

ImageIcon thisImage = new ImageIcon("images/youpic.png");

spécifiez le dossier (images) puis séparez-le avec/et ajoutez le nom du fichier pic. 

J'espère que ceci est utile. Si quelqu'un d'autre l'a posté, je n'ai pas lu. Alors ... oui ... pensait le renforcement. 

0
SolubleHook