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
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:
- comment ajouter des Images à votre projet
- comment utiliser les icônes
- un petit éclaircissement supplémentaire , comme indiqué dans la première réponse exemple de code.
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);
}
}
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/
.
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());