J'ai commencé Java il y a une semaine, et maintenant je voudrais insérer une image dans ma fenêtre. Quoi que j'essaye, je continue d'avoir ceci dans Eclipse: javax.imageio.IIOException: impossible de lire le fichier d'entrée!
package graphics;
import Java.awt.Color;
import Java.awt.Graphics;
import Java.awt.Image;
import Java.io.File;
import Java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
import src.Common;
public class Window extends JFrame
{
public class Panel extends JPanel
{
public void paintComponent(Graphics g)
{
Image img;
try
{
img = ImageIO.read(new File("/logo.jpg"));
g.drawImage(img, 0, 0, this);
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
public Window(String title, int width, int height)
{
this.setTitle(title);
this.setSize(width, height);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setContentPane(new Panel());
this.setVisible(true);
}
}
Je pense que le code est assez explicite. J'ai essayé de résoudre le problème avec this , this , et that .
Ce que j'essaie de faire est un programme de bureau, et mes sources sont stockées comme ça: training/src/graphics/Window training/src/src/main
J'ai mis l'image que je veux lire dans chaque dossier et j'ai toujours le problème: /
Qu'ai-je fait de mal?
EDIT Finalement résolu, voici la réponse
Nice cOw m'a donné le lien qui a aidé. J'ai donc mis mes images dans un dossier et changé la façon d'y accéder, comme décrit dans le lien.
getClass().getResource("/images/yourImageName.extension");
Avez-vous essayé d'utiliser new File("logo.jpg");
(sans le début /)?
Et êtes-vous sûr que le logo.jpg est copié sur votre sortie? (Certains IDE ne copient pas tous les fichiers de vos répertoires source vers vos répertoires de sortie (ou cible).)
/src
|-> Window.Java
|-> Logo.jpg
devient
/out
|-> Window.class
(Notez que l'IDE/le compilateur ne copie pas l'image dans votre répertoire de sortie et donc le code compilé ne peut pas trouver l'image - même si vous avez spécifié le chemin correct)
Essayez de faire déboguer la ressource de fichier à laquelle vous essayez réellement d'accéder. La première étape serait d'obtenir votre new File("/logo.jpg").get [Canonical]Path()
et de l'imprimer sur System.out
(ou bien regardez dans le débogueur). Je suppose que le problème est le /
avant logo.jpg
, qui pointe vers votre répertoire racine (par exemple c :) et votre fichier n'est pas là, mais je ne connais pas en détail la configuration de votre fichier.
Le problème est que vous ne regardez rien avant l'image, il regarde donc dans un dossier qui n'est pas là pour le trouver.
Vous devez créer un dossier pour stocker les images dans votre projet, puis l'appeler, le nom de votre dossier devant le nom de l'image. par exemple.
ImageIO.read(new File("Folder/Image.png"));
Sinon, vous pouvez trouver l'image en parcourant le répertoire entier, ce qui n'est pas un bon moyen car cela prend plus de temps, et lorsque vous déplacez votre projet, ce ne sera pas un lien de travail car le répertoire sera différent. Par exemple:
ImageIO.read(new File("D:/Eclipse/Workspace/Project/Folder/Image.png"));
Créer un dossier dans votre projet afin qu'il soit au même niveau que le dossier source dans le répertoire et l'appeler pour l'image, comme ceci:
Structure des dossiers;
réglages
src
Dossier d'images
poubelle