Java: Charger une image depuis un Jar

Par :
fredericmazue
lun, 03/11/2008 - 15:46
Niveau :
Facile

Lorsqu'on crée des interfaces utilisateur en Java, il est fréquent d'avoir besoin de charger une image pour l'afficher dans un composant. Charger une image depuis un fichier résidant sur le disque dur ne pose pas de problème en soi. Mais comment faire quand l'image réside dans une archive Jar ? Quel est alors le chemin du fichier ? Nous n'avons pas vraiment besoin de le savoir. Le chargeur de classes de la machine virtuelle peut s'y retrouver pour nous. Voyons comment faire sous Netbeans. Mais sachant que le principe s'applique avec n'importe quel environnement de développement Java 



Ce que nous voulons

Nous voulons charger une image à la volée en cliquant sur un bouton




Créer le projet

Créez un projet tout simple qui ouvre un JFrame et dans le concepteur visuel déposez un contrôle JButton et un contrôle JLabel




Bien placer la ressource

L'image à charger faire partie de ce que l'on appelle des ressources. Celles-ci doivent se situer de façon conjointe à la classe qui veut les utiliser, classe étant pris au sens fichier .class du terme, donc code compilé du terme. Commencez par construire une première fois votre projet pour que les fichiers .class soient générés. Sous Netbeans vous trouverez ces classes dans le sous répertoire build/classes/nom_du_package de votre projet. Déposez la ressource dans ce répertoire. La ressource peut fort bien être elle-même dans un répertoire, comme illustré ci-dessous, pourvu que ce répertoire soit conjoint à la classe qui veut utiliser la ressource.




,Ecrire le code

Dans le gestionnaire d'événement du bouton, écrivez ce code:

URL url_image = DemoImageJar.class.getResource("images/logo.jpg");
jLabel1.setIcon(new ImageIcon(url_image));

Lorsque la JVM charge une classe pour en exécuter le code, elle commence par charger le fichier .class. Le contenu de ce fichier est encapsulé dans un objet qui est une instance de la classe Class. Cette classe comporte la méthode membre getResource qui permet d'accéder à toutes ressources localisée conjointement à la classe.  La JVM sait en effet toujours d' où elle a chargé le fichier de classe, que ce soit sur un disque dur, dans un Jar ou même quelque part sur le réseau. C'est d'ailleurs pour cette raison qu'une ressource n'est pas localisée par un chemin, mais bien par une URL. Voilà donc comment nous obtenons cette URL dans le code ci-dessus, et, ça tombe bien, la classe ImageIcon peut être construite à partir d'une URL 



Utilisation autonome

Construisez votre projet, n'oubliez pas de définir la classe principale.  Automatiquement, Netbeans place classes et ressources dans un jar, selon la même organisation que celle du projet. Il ne reste plus qu'à essayer le code de façon autonome. Dans une console et depuis le répertoire contenant le jar, tapez:


java -jar DemoImageJar.jar

C'est aussi simple que cela 



Ajouter un commentaire

Filtered HTML

Plain text

CAPTCHA
Cette question permet de vérifier que vous n'êtes pas un robot spammeur :-)
  AA   N   N  ZZZZZ  U   U  H  H 
A A NN N Z U U H H
AAAA N N N Z U U HHHH
A A N NN Z U U H H
A A N N ZZZZZ UUU H H