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?
8 réponses
Fonctionne très bien pour moi. Vérifiez ce que vous pouvez avoir différentes.
exemple 1: (resources src)
Mesures:
Structure Du Fichier
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); } }); } }
[clic droit sur le projet] → [exporter] → [fichier JAR exécutable] → [configurer le lancement] config]
Profit
pour votre information, la même configuration fonctionne très bien dans eclipse
exemple 2: (resources dans src - mais en projet)
Mesures:
Structure du Fichier (notez ressources ressemble à une plaine dossier)
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]
[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
table des matières du dossier Ressources est dans le chemin de compilation (notez le petit paquet dans le dossier maintenant
nouveau code n'utilise plus le préfixe des ressources pour le chemin
URL url = Main.class.getResource("/stackoverflow.png");
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:
[Clic Droit Sur Le Projet] → [Propriétés] → [Exécuter/Déboguer Les paramètres]
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]
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
classeMaintenant, lorsque vous exportez comme illustré dans l'exemple ci-dessus, vous sélectionnez l' exécuter la configuration
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:
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.
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
- assurez-vous de créer un paquet pour notre code, pas seulement créer un projet dans Eclipse
- 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)
- obtenir toutes les références à des fichiers à partir de getResource() (obtenir l'URL de référence)
- 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();
}
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é...
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.
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.
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
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));