web-dev-qa-db-fra.com

Ajouter une image au JAR Java

J'utilise des images dans JFrame, j'ai donné un chemin pour charger l'image dans le panneau du cadre, mais quand j'ai fait un pot de l'application, ça n'affiche pas les images.
Où dois-je placer l'image?
Comment dois-je spécifier le chemin?

setIconImage(Toolkit.getDefaultToolkit().getImage(
                "D:\\RFT\\src\\dailogBox\\dump.jpg"));

comme ça je l'ai fait.

22
ranjan

Première étape: placez votre image à un emplacement défini dans votre fichier JAR. Si vous le placez dans le dossier src, peut-être que votre IDE ou votre outil de build le placera automatiquement dans le JAR. Sinon, consultez la documentation de votre IDE/build-tool, dans quel emplacement vous devez le mettre.

Deuxième étape: accédez au fichier à partir de votre programme. Je suppose que vous le mettez dans le package (le chemin dans votre JAR) package1/package2 et le fichier s'appelle dump.jpg. Dans ce cas, vous appelez:

setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("/package1/package2/dump.jpg")));

getClass (). getResource (...) renvoie une URL pour une ressource sur votre chemin de classe. Vous démarrez le chemin dans le chemin de classe avec un "/" et utilisez le chemin complet/packages vers votre ressource, séparés par "/".

43
Mnementh

Ceci IS la meilleure façon de gérer toutes les images et icônes dans une application JAR.

Une fois que vous avez zippé toutes vos images et icônes dans son propre fichier JAR - Configurez votre chemin de génération en ajoutant le fichier JAR d'images dans votre onglet bibliothèques afin qu'il soit maintenant inclus dans votre chemin de classe.

Ensuite, utilisez simplement ce qui suit x lignes de code au début de votre constuctor pour accéder à toute image dont vous avez besoin pour tout, y compris une image SystemTray qui n'accepte pas le simple ImageIcon comme icône principale (bizarre je sais ). Les lignes 3x sont:

  URL iconUrl = this.getClass().getResource("/image-iconb.png");
  Toolkit tk = this.getToolkit();
  someimgicon = tk.getImage(iconUrl);

(someimgicon est juste un constructeur a déclaré la variable Image) Maintenant vous pouvez définir une icône de fenêtre aussi simplement que:

setIconImage(someimgicon);

et en même temps, utilisez la même variable lors de la configuration de System TrayIcon en déclarant:

 trayIcon = new TrayIcon(someimgicon, "SystemTray Demo", popupMenu);

Ce qui précède vous permet de déclarer des Images ou des ImageIcons facilement et de manière centralisée sans courir le risque de ne pas conserver les ressources d'images au bon endroit. Il reste agréable et bien rangé, avec le JAR contenant toutes vos images automatiquement compilées au moment de l'exécution et de la distribution de votre programme.

En prime, une fois que le JAR est enregistré dans votre chemin de classe - vous pouvez continuer à ajouter n'importe quelle autre image dans le même JAR à tout moment sans aucun problème aussi - Tout fonctionne et les images ajoutées sont instantanément disponibles pour votre application.

Beaucoup mieux à mon avis.

6

Créez d'abord un package (dites des images) sous Packages source

copiez toutes vos images dans ce package (lorsque vous créez un package, un dossier au nom de votre package sera créé dans le dossier src de votre projet, alors copiez-y les images)

Vous pouvez accéder à vos images depuis votre programme

Exemple 1:

        this.setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("/images/yourimagename")));

Exemple 2:

        URL imageurl = getClass().getResource("/images/imagename");//assuming your package name is images 
        Image myPicture = Toolkit.getDefaultToolkit().getImage(imageurl);
        JLabel piclabel = new JLabel(new ImageIcon( myPicture ));
        piclabel.setBounds(0,0,myPicture.getWidth(null),myPicture.getHeight(null));

Maintenant, utilisez ce piclabel JLabel

3
Joyal Augustine

Dans Netbeans 8.1, ce que j'ai fait, c'est d'inclure le dossier d'icônes et d'autres images appelé Resources dans le dossier src dans le fichier de projet. Donc, chaque fois que je crée un fichier Jar, le dossier est inclus là-bas. L'arborescence des fichiers devrait être comme ceci:

  • src (les fichiers Java dans les paquets source sont ici)
  • ** FORFAIT QUE VOUS AVEZ NOMMÉ DANS LE PROJET **

    • file.Java
  • Ressources

    • image.jpg

Le code doit être comme:

jToggleButton1.setIcon(new javax.swing.ImageIcon(this.getClass().getResource("/resources/image.jpg")));
1
Abdelsalam Shahlol

Il existe de nombreuses façons, par exemple créer un dossier appelé ressources dans votre fichier jar et référencer vos images à partir de là en utilisant un chemin relatif ....

1
hhafez

Ajoutez l'image dans votre pot en tant que ressource, puis (en supposant que le pot se trouve sur votre chemin de classe), utilisez le chargeur de classe pour chargez-le en tant que flux .

0
joeslice