Le fichier JAR Runnable exporté par Eclipse ne contenant pas d’images

Mes images ne se chargeront pas lors de l’exécution d’un fichier JAR exporté depuis Eclipse.

J’ai les images dans un package de classe de ressources. J’ai aussi essayé un dossier source d’images sans aucune chance.

Fonctionne parfaitement lorsqu’il est chargé depuis Eclipse. Les images se trouvent dans le fichier JAR exporté, elles sont donc correctement exscopes.

J’ai essayé:

label.setIcon(new ImageIcon(MainFrame.class.getResource("/resources/header.jpg"))); 

J’ai aussi essayé:

 URL url = getClass().getResource("/resources/header.jpg"); Image image = Toolkit.getDefaultToolkit().getImage(url); label.setIcon(new ImageIcon(image)); 

Et:

 try { label.setIcon(new ImageIcon(ImageIO.read(getClass().getResource("/resources/header.jpg")))); } catch (IOException e1) { e1.printStackTrace(); } 

Aucune suggestion?

Fonctionne bien pour moi. Vérifiez ce que vous avez peut-être différent.

Exemple 1: (ressources dans src)

Pas:

  1. Structure du fichier

    entrer la description de l'image ici

  2. Code

     package com.stackoverflow.test; import java.net.URL; import javax.swing.*; // Wild carded for brevity. // Actual code imports single classes public class Main { public static void main(Ssortingng[] args) { SwingUtilities.invokeLater(new Runnable(){ public void run() { URL url = Main.class.getResource( "/resources/stackoverflow.png"); ImageIcon icon = new ImageIcon(url); JFrame frame = new JFrame(); frame.add(new JLabel(icon)); frame.pack(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLocationRelativeTo(null); frame.setVisible(true); } }); } } 
  3. [Faites un clic droit sur le projet] → [Exporter] → [Fichier Jar exécutable] → [Configurer la configuration de lancement]

    entrer la description de l'image ici

  4. Profit

    entrer la description de l'image ici

Pour votre information, la même configuration fonctionne avec Eclipse


Exemple 2: (ressources pas dans src – mais dans le projet)

Pas:

  1. Structure de fichier (les ressources de notification ressemblent à un dossier ordinaire)

    entrer la description de l'image ici

  2. Ce que nous devons faire maintenant, c’est mettre les ressources sur le chemin de la construction. Ce que cela fait est de tout mettre dans le dossier (sauf le dossier lui-même) sur le classpath

    • Faites un clic droit sur le projet et allez dans [Build Path] → [Configure Build Path]

      entrer la description de l'image ici

    • Dans l’onglet [Sources] de la boîte de dialog, sélectionnez [Ajouter un dossier], puis dans la nouvelle boîte de dialog, sélectionnez le dossier [Ressources].

      entrer la description de l'image ici

    • Maintenant le contenu du dossier de ressources est dans le chemin de construction (remarquez le petit paquet dans le dossier maintenant

      entrer la description de l'image ici

  3. Le nouveau code n’utilise plus le préfixe des ressources pour le chemin

     URL url = Main.class.getResource("/stackoverflow.png"); 
  4. Identique aux étapes 3 et 4 ci-dessus, et profitez-en!


METTRE À JOUR

Configuration de la configuration de lancement

En règle générale, une fois que vous exécutez la classe (cliquez avec le bouton droit de la souris sur Exécuter en tant qu’application Java), une configuration d’exécution est configurée. Vous en aurez besoin pour définir le sharepoint départ dans le manifeste. Mais voici comment le faire manuellement.

Pas:

  1. [Projet clic droit] → [Propriétés] → [Paramètres d’exécution / de débogage]

    entrer la description de l'image ici Vous pouvez voir que j’ai déjà une configuration d’exécution (qui est définie implicitement à partir de la simple exécution de la classe). Mais pour en créer un nouveau, sélectionnez [Nouveau] → [Application Java]

  2. Créez un nom pour exécuter la configuration et parcourez ou tapez une classe de lancement principale. Dans mon cas, c’est la classe com.stackoverflow.test.Main

    entrer la description de l'image ici

  3. Maintenant, lorsque vous exportez comme indiqué dans l’exemple ci-dessus, vous sélectionnez la configuration d’exécution

    entrer la description de l'image ici

  4. Exécutez le pot comme ci-dessus.


MODIFIER

Résultat à vérifier

Manifeste:

 Manifest-Version: 1.0 Rsrc-Class-Path: ./ Class-Path: . Rsrc-Main-Class: com.stackoverflow.test.Main Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader 

Pot extrait:

entrer la description de l'image ici

J’ai trouvé ça quand tu as changé:

Emballage des bibliothèques requirejses dans un fichier jar généré

à

Extraire les bibliothèques requirejses dans le fichier jar généré

dans la configuration de lancement, cela a fonctionné pour moi.

Bouton Extraire les bibliothèques requises

Pour créer un fichier JAR exécutable à partir d’Eclipse, reportez-vous à l’article “Création de fichiers jar exécutables dans Eclipse (ou autre IDE … ou à la main):” ( https://www.cefns.nau.edu/~edo/Classes /CS477_WWW/Docs/RunnableJarsinEclipse.html ), il est mentionné que nous devons faire quatre choses comme

  1. Assurez-vous de créer un package pour notre code, et pas seulement créer un projet dans Eclipse
  2. Créez le sous-dossier (sous-dossier) pour nos fichiers de ressources sous le package principal de notre code (notez que le sous-package est sous le package principal, il ne figure pas seulement dans le projet)
  3. obtenir toutes les références de fichiers de getResource () (obtenir la référence URL)
  4. Exportation de fichiers sous forme de fichiers JAR exécutables dans Eclipse (Fichier -> Exporter … -> sélectionner Fichiers JAR exécutables -> suivant -> …)

Mais pour un fichier image dans l’exemple de code de l’article ci-dessus, il ne crée que l’ImageIcon, il ne crée pas l’image SWT. Internet pose de nombreuses questions sur la façon d’obtenir une image SWT à partir d’une URL ou sur la conversion d’ImageIcon en image SWT. ci-dessous est l’exemple de code pour obtenir l’image SWT à partir de l’URL,

 Image imgSWT=null; // Image class is the SWT Image class ImageDescriptor imgDesc=null; java.net.URL imgURL = YourClassName.class.getResource("path/image_filename"); if (imgURL != null) { imgDesc = ImageDescriptor.createFromURL(imgURL); imgSWT = imgDesc.createImage(); } 

Le problème était que j’avais ce projet dans mon profil Windows … qui avait un “!” dedans … (DeNitE! -> était le nom de mon profil Windows)

Dès que je l’ai changé en DeNitE (sans le!) Ça a bien fonctionné …

Un autre moyen de contourner le problème est que si vous placez votre fichier de ressources, un fichier .jar au même emplacement, cela devrait fonctionner. Le seul inconvénient est que vous devez avoir les ressources avec le fichier jar à tout moment.

Si ce n’est pas un problème, vous pouvez le faire de cette façon.

J’ai le même problème .. Vous pouvez utiliser ceci ..

 Image Icon= new ImageIcon(new WE4().getClass().getResource("IC.jpg")) 

Ici, WE4 est le nom de mon constructeur de classe. J’espère que cela aide.

Sauf si vous devez avoir vos fichiers dans le pot, c’est probablement la façon la plus simple de le faire:

header = ImageIO.read(new File("./resources/header.jpeg"));

l’en-tête doit être une image / image tamponnée. Cela va dans le dossier dans lequel se trouve le fichier jar exécutable et recherche un dossier appelé ressources. http://i.stack.imgur.com/x8xtO.png

Deux étapes simples:

1 – Ajouter le dossier à Build Path;

2 – Utilisez ceci:

  InputStream url = this.getClass().getResourceAsStream("/load04.gif"); myImageView.setImage(new Image(url));