IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Image dans un jar exécutable.


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 29
    Points : 24
    Points
    24
    Par défaut Image dans un jar exécutable.
    Bonsoir !

    J'ai déjà posté récemment sur ce forum mais j'ai un nouveau problème. La réponse précédente fut rapide et efficace, je me permet donc d'en poser une nouvelle.

    Je veux créer un jar executable de mon projet, j'y arrive, le jar se lance mais l'image que j'avais mit en fond ne s'affiche pas. J'ai donc cherché sur internet. J'ai vue qu'il fallait créer un dossier image et l'ajouter au classpath, sans succès, mettre l'image dans le dossier src, sans succès non plus et puis j'ai trouvé ça :

    final ImageIcon image = new ImageIcon(this.getClass().getResource("img\background.jpg"));

    Le problème c'est que cette ligne est dans mon main, le this ne fonctionne donc pas.

    Je demande donc comment créer un jar executable avec un chemin vers l'image.

    Désolé si la réponse est évidente comme je l'ai déjà dit je suis novice.

    Merci !

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    pour le premier aspect de ta question, tu peux sois mettre ton dossier image dans le classpath, soit intégrer ce dossier à ton jar, ce qui se fait en général par la build (sur eclipse par exemple, il suffit que tu ajoutes dans dossier au classpath du projet et à l'export de ton jar le dossier sera inclus)

    ensuite pour la découverte des urls de fichiers se trouvant dans le classpath, on utilise la méthode getResource() (ou getResourceAsStream() pour avoir le flux directement), de la classe Class ou de la la classe ClassLoader :
    - dans le premier cas, le path de ton image devra être relative à la position de la classe dans l'arborescence de dossier/packages de ton jar
    - dans le second cas, relative à la racine

    Enfin, en ce qui concerne l'accès à this : il n'y a pas effectivement de this dans un contexte statique. Mais le but du this dans l'exemple est juste de pointer sur la classe qui contient ton code d'exemple.

    Plus clairement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class ExempleThis {
     
    	public void test() {
    		System.out.println( this.getClass().getResource("img/background.jpg"));
    	}
     
    }
    ici le this représente l'instance de la classe elle même, mais a juste pour but de récupérer l'instance de classe Class, afin d'appeler sa méthode getResource

    donc l'équivalent dans une méthode statique, comme la méthode main, est d'aller chercher l'instance de classe Class de ta classe qui contient ta méthode main :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class ExempleThis {
     
    	public static void main(String[] args) {
     
    		System.out.println( ExempleThis.class.getResource("img/background.jpg"));
    		new ExempleThis().test();
     
    	}
     
    	public void test() {
    		System.out.println( this.getClass().getResource("img/background.jpg") );
    	}
     
    }
    les deux lignes affichées dans la console à l'exécution de ce programme seront les mêmes

    une dernière chose, attention au path relatif de tes resources : lorsque tu inclus un dossier de ressources, ce dossier ne fait pas partie du chemin relatif.

    par exemple, si tu as un dossier c:/truc/img qui contient :

    toto.png
    icons/icon.png

    le chemin à mettre en argument de getResource sera :
    "toto.png" ou "icons/icon.png", pas "img/toto.png" ou "img/icons/icon.png"
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    juste pour compléter le post précédent:
    le getResource de la classe part du package de la classe courante
    donc dans le(s) jar(s):
    si ta classe est dans le package org.me.librairie
    un getResource("img/truc.png")
    cherchera dans les jars du classpath avec un chemin: /org/me/librairie/img/truc.png
    un getResource("/img/truc.png")
    cherchera dans les jars du classpath avec un chemin: /img/truc.png
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 29
    Points : 24
    Points
    24
    Par défaut
    Parfait, encore une réponse rapide et claire, merci !

    Par contre :
    final ImageIcon image = new ImageIcon(MainInternet.class.getResource("img/background.jpg"));

    Marche pour le .jar, il retrouve l'image, mais en compilant avec Eclipse il renvoie un NullPointerException.

    Edit : C'est bon, c'est que je n'avais pas ajouté mon dossier img à mon package. Tous est OK !

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    probablement que tu as oublié d'ajouter le dossier contenant tes ressources (images) dans le build path, mais que tu ne l'a ajouté "en plus" que lorsque tu as créé le jar. Du coup, dans eclipse, cette ressource n'existe pas

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Shadorc Voir le message
    Marche pour le .jar, il retrouve l'image, mais en compilant avec Eclipse il renvoie un NullPointerException.
    pas très clair :o

    pour le .jar, il retrouve l'image : tu veux dire que l'image est bien intégrée à ton jar dans le dossier voulu ?

    en compilant avec Eclipse il renvoie un NullPointerException l'exception c'est à l'éxécution, pas à la compile

    je suppose que tu veux dire que quand tu exportes ton jar ton image est bien retrouvée et s'affiche, mais pas à l'éxécution sous eclipse ?

    dans eclipse, mais ton dossier image dans un dossier de ton projet, il faut que tu ajoutes ce dossier d'image au classpath : va dans le menu Build Path/Configure Build Path, puis dans le dialogue, va dans l'onglet Libraries, puis actionne Add Class Folder, et sélectionne ton dossier image dans ton projet

    cela dit c'est assez bizarre que ton jar sois ok et pas sous eclipse, tu exportes ton jar comment ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 29
    Points : 24
    Points
    24
    Par défaut
    J'ai édité mon message mais ça ne c'est pas vue.
    Le problème est résolu, en ajoutant mon dossier img à mon package, c'est bon.
    Et oui, c'est exécuter pas compiler (habitude du C++).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Images dans un JAR (tout dans un seul exécutable)
    Par jujusous3 dans le forum Eclipse Java
    Réponses: 8
    Dernier message: 21/02/2010, 00h02
  2. Ouvrir un document Word dans un jar exécutable
    Par CaptainT dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 26/06/2007, 14h07
  3. Images dans un jar exécutable..
    Par wariom dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 11/06/2006, 16h52
  4. [DEBUTANT] Image dans un .jar
    Par flzox dans le forum Eclipse Java
    Réponses: 6
    Dernier message: 16/02/2006, 16h37
  5. [JAR] Recherche d'1 image dans un JAR différent
    Par tomburn dans le forum Général Java
    Réponses: 5
    Dernier message: 26/04/2005, 15h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo