Eclipse exported Runnable JAR ne montrant 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 une catégorie ressources paquet. J'ai aussi essayé un dossier source d'images sans succès.

Fonctionne parfaitement lorsqu'il est chargé à partir d'Eclipse. Les images sont dans le fichier JAR exporté, donc ils exportent très bien.

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();
}

des suggestions?

28
demandé sur Francesco Menzani 2014-09-03 07:08:45

8 réponses

Fonctionne très bien pour moi. Vérifiez ce que vous pouvez avoir différentes.

exemple 1: (resources src)

Mesures:

  1. Structure Du Fichier

    enter image description here

  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(String[] 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. [clic droit sur le projet] → [exporter] → [fichier JAR exécutable] → [configurer le lancement] config]

    enter image description here

  4. Profit

    enter image description here

pour votre information, la même configuration fonctionne très bien dans eclipse


exemple 2: (resources dans src - mais en projet)

Mesures:

  1. Structure du Fichier (notez ressources ressemble à une plaine dossier)

    enter image description here

  2. ce que nous devons faire maintenant, c'est mettre les ressources sur le chemin de construction. Cela permet de tout mettre dans le dossier (à l'exclusion du dossier lui-même) sur classpath

    • clic droit sur le projet et aller à [Build Path] → [Configure Build Path]

      enter image description here

    • [Source] de l'onglet dans la boîte de dialogue, sélectionnez [Ajouter un Dossier] et dans la nouvelle boîte de dialogue, sélectionnez [ressources] dossier

      enter image description here

    • table des matières du dossier Ressources est dans le chemin de compilation (notez le petit paquet dans le dossier maintenant

      enter image description here

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

    URL url = Main.class.getResource("/stackoverflow.png");
    
  4. comme pour les étapes 3 et 4 ci-dessus, et le profit!


UPDATE

configuration de la Configuration de lancement

généralement, une fois que vous exécutez la classe (c.-à-d. clic droit sur la classe et exécution en tant qu'Application Java), une configuration d'exécution sera configurée. Vous aurez besoin de ce définir comme le point de lancement dans le manifeste. Mais voici comment le faire manuellement.

Mesures:

  1. [Clic Droit Sur Le Projet] → [Propriétés] → [Exécuter/Déboguer Les paramètres]

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

  2. créer un nom pour exécuter la configuration et parcourir ou taper une classe de lancement principale. Dans mon cas sa l' com.stackoverflow.test.Main classe

    enter image description here

  3. Maintenant, lorsque vous exportez comme illustré dans l'exemple ci-dessus, vous sélectionnez l' exécuter la configuration

    enter image description here

  4. lancez le bocal comme ci-dessus.


EDIT

résultat à vérifier pour

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

Jar extrait:

enter image description here

66
répondu Paul Samsotha 2014-09-03 06:31:21

j'ai constaté que lorsque vous avez modifié:

empaqueter les bibliothèques nécessaires dans le jar généré

extraire les bibliothèques nécessaires dans le jar généré

dans la configuration de lancement, ça a marché pour moi.

Extract Required Libraries Button

2
répondu sazzy4o 2017-01-30 04:15:45

pour créer un fichier JAR exécutable à partir D'Eclipse, nous pouvons nous référer à l'article "Creating Runnable Jars in Eclipse (or other IDE...ou à la main):" (https://www.cefns.nau.edu/~edo/Classes/CS477_WWW/Docs/RunnableJarsinEclipse.html), il a mentionné que nous devons faire quatre choses comme

  1. assurez-vous de créer un paquet pour notre code, pas seulement créer un projet dans Eclipse
  2. Créer le sous-emballage (sous-dossier) pour nos fichiers de ressources sous le paquet principal de notre code (notez que le sous-paquet est sous paquet principal, n'est pas seulement dans le projet)
  3. obtenir toutes les références à des fichiers à partir de getResource() (obtenir l'URL de référence)
  4. exportation de fichiers sous forme de pot exécutable dans Eclipse (File -> exportation... -> sélectionnez Runnable JAR fichiers -> suivant -> ...)

mais pour le fichier image dans le code d'exemple de l'article ci-dessus il ne crée que L'ImageIcon, il ne crée pas L'Image SWT, et il y a beaucoup de questions dans L'Internet pour savoir comment obtenir L'Image SWT de L'URL ou comment convertir ImageIcon en Image SWT, ci-dessous est le code exemple pour obtenir l'image SWT 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();
}
1
répondu phchen2 2015-09-11 00:31:33

le problème était que j'avais ce projet dans mon profil Windows... qui avait de "!" dedans... (Dénitif de l'! -> est le nom de mon profil Windows)

dès que je l'ai changé en DeNitE (sans le !) il a bien fonctionné...

1
répondu DeNitE Appz 2015-12-06 20:50:32

une autre solution consiste à mettre votre fichier de ressources, Un votre .jar file au même endroit, ça devrait marcher. 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.

1
répondu Nevets17 2016-09-30 17:19:36

j'ai le même problème.. Vous pouvez utiliser cette..

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

voici WE4 est mon nom de constructeur de classe. Espérons que cela aide.

1
répondu Md. Sakib Hossain 2016-12-23 05:06:43

A moins que vous ne deviez 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"));

header doit être une Image/BufferedImage. Cela va au dossier dans lequel se trouve le jar exécutable et cherche un dossier appelé resources. http://i.stack.imgur.com/x8xtO.png

0
répondu TheChubbyPanda 2016-06-01 19:48:40

deux simples étapes:

1 - Ajouter le dossier à Construire un Chemin d'accès;

2-Utilisez ceci:

    InputStream url = this.getClass().getResourceAsStream("/load04.gif");
    myImageView.setImage(new Image(url));
0
répondu Michel Fernandes 2016-08-15 23:40:42