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 sont dans le fichier JAR exporté, elles sont donc correctement exportées.
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?
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é pour DeNitE (sans le!), Cela a bien fonctionné ...
Fonctionne bien pour moi. Vérifiez ce que vous pouvez avoir différent.
Pas:
Structure de 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);
}
});
}
}
[Faites un clic droit sur le projet] → [Exporter] → [Fichier Jar exécutable] → [Configurer la configuration de lancement]
Profit
Pour votre information, la même configuration fonctionne bien dans Eclipse
Pas:
Structure de fichier (les ressources de notification ressemblent à un dossier ordinaire)
Ce que nous devons faire maintenant, c’est placer les ressources sur le chemin de la construction. Ce que cela fait est de tout mettre dans le dossier (à l'exclusion du dossier lui-même) sur le classpath
Faites un clic droit sur le projet et allez à [Chemin de la construction] → [Configurer le chemin de la construction]
Dans l'onglet [Sources] de la boîte de dialogue, sélectionnez [Ajouter un dossier], puis dans la nouvelle boîte de dialogue, sélectionnez le dossier [Ressources].
Maintenant le contenu du dossier de ressources est dans le chemin de construction (remarquez le petit paquet dans le dossier maintenant
Le nouveau code n'utilise plus le préfixe des ressources pour le chemin
URL url = Main.class.getResource("/stackoverflow.png");
Identique aux étapes 3 et 4 ci-dessus, et profitez-en!
METTRE À JOUR
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 point de départ du manifeste. Mais voici comment le faire manuellement.
Pas:
[Projet clic droit] → [Propriétés] → [Paramètres d'exécution/de débogage]
Vous pouvez voir que j’ai déjà une configuration d’exécution (implicitement définie par le simple fait d’exécuter la classe). Mais pour en créer un nouveau, sélectionnez [Nouveau] → [Application Java].
Créez un nom pour la configuration d'exécution et parcourez ou tapez une classe de lancement principale. Dans mon cas c'est la classe com.stackoverflow.test.Main
Maintenant, lorsque vous exportez comme indiqué dans l'exemple ci-dessus, vous sélectionnez la configuration d'exécution.
Exécutez le pot comme ci-dessus.
MODIFIER
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:
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 disposer des 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 l'utiliser ...
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 vous aidera.
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
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. Voici l'exemple de code permettant d'obtenir l'image SWT à partir d'une 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();
}
Deux étapes simples:
1 - Ajouter le dossier au chemin de construction;
2 - Utilisez ceci:
InputStream url = this.getClass().getResourceAsStream("/load04.gif");
myImageView.setImage(new Image(url));