Pour m'amuser et m'entrainer en même temps, j'ai codé un petit programme qui affiche une image quand on clique sur un bouton, et joue un son quand on clique sur un autre.
Jusqu'ici, tout va bien, tout fonctionne au mieux.
Pourtant, ils sont bien présent à la racine du .jar...
J'ai essayé de recréer d'autres .jar, en changeant des options, durant le processus, changer la place des images et du son ( qui étaient avant dans un dossier, qui était à la racine du .jar), mais rien n'y fait, mes images ne s'affichent pas...
Est-ce que vous auriez une idée de quoi cela viendrait ? Il faut que j'ajoute manuellement mes fichier par lignes de commande dans le fichier Manifest ?
Je ne sais pas comment tu code, mais j'ai déjà eu ce problème auparavant, personnellement je code sous Eclipse et du coup pour Eclipse, tu importe l'image dans le package où tu as écris le code qui appelle l'image, et le chemin de l'image est ensuite tout simplement image.png.
Je suis désolé de m'être absenté aussi longtemps, mais j'ai eu une periode où je n'avais plus trop le temps de programmer, et j'avais écris pas mal d'âneries dans mon code, alors j'ai préféré attendre d'en avoir un plus correct pour vous montrer...
private JButton formeCarre = new JButton(new ImageIcon("src/ImagesArdoise/Carre.png")),
formeRond = new JButton(new ImageIcon("src/ImagesArdoise/Rond.png")),
couleurRouge = new JButton(new ImageIcon("src/ImagesArdoise/Rouge.png")),
couleurBleu = new JButton(new ImageIcon("src/ImagesArdoise/Bleu.png")),
couleurVert = new JButton(new ImageIcon("src/ImagesArdoise/Vert.png"));
En fait, les images sont contenues dans des JButton, qui eux sont contenus à leur tour dans une toolBar.
Et voici un screen de mes fichiers :
J'ai pris soin de les placer dans le dossier "src" pour être sûr qu'elles soient exportées dans le .jar, et j'ai bien sûr vérifié si elles se trouvaient dans le .jar, et oui, elles y sont.
Je ne vois vraiment pas ce que je fais de mal, pourtant... :/
Pour charger les images d'un jar, je te conseillerai d'utiliser ça:
public Image loadImage(String fileName) {
return new ImageIcon(getClass().getResource(fileName).getImage());
}
J'ai un problème avec ton code, Gnoman,
Parce que d'abord, il retourne une ImageIcon, alors que la fonction est déclarée comme renvoyant une Image, et ensuite, j'ai une erreur d'Eclipse qui me signale que la méthode getImage() n'est pas définie pour le type URL...
J'ai essayé de le passer en getFile(), et de corriger la fonction en la rendant "pubic ImageIcon", mais j'ai une erreur lorsque je lance mon code...
( Je sais pas ce que je fais là, mais j'arrive pas à sortir de la citation... )
autre solution tu met a la racine de ton projet (a cote de src) un dossier res et tu appelle tes image en mettant res/[nom de ton image]
Toujours pareil, lorsque je suis sous Eclipse, je vois les images, mais une fois que le code est exporté dans un .jar, les images ne s'affichent plus...
J'ai même essayé de lancer mon programme sur un autre PC que le mien, pensant que le problème venait de mon PC, mais non, j'ai le même problème...
C'est la seule méthode fonctionnelle car les autres méthodes s'appuient sur un chargement de fichier "classique".
Quand tu travailles dans ton IDE ça ne pose pas de problème puisque les dossiers existent bien. En revanche, on ne peut absolument pas parcourir l'arborescence d'un .jar de la même manière qu'un dossier, donc ça ne fonctionne plus. (A moins d'utiliser du bricolage très chiant en ouvrant le .jar comme un zip, mais c'est très nul).
Les solutions basées sur un chargement classique sont donc à proscrire si l'on souhaite stocker les images à l'intérieur du .jar. Ma méthode fonctionne car elle utilise le ClassLoader, or le ClassLoader fonctionne dans tous les cas, que ce soit avec des dossiers ou dans le jar, et heureusement d'ailleurs sinon les jar ne marcherait jamais (puisque les Classes ne seraient pas chargées).
J'ai eu le même problème et la méthode de Letalkram est bien la solution .
Le monde tournera tant que les chats seront biens nourris .
Mon .jar n'affiche aucune image
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.