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

Java Discussion :

[Jar][Classpath]Pb chargement resource classpath dans un jar


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut [Jar][Classpath]Pb chargement resource classpath dans un jar
    Bonjour,

    je charge des images présentes dans le CLASSPATH en utilisant la méthode expliquée par bulbo ici:

    http://java.developpez.com/faq/java/...mentRessources

    à un certain moment, j'ai donc un bout de code comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    String SUB = System.getProperty("file.separator");
    URL url = this.getClass().getResource("img" + SUB + "ico.jpg");
    Image vortex = new ImageIcon(url).getImage();
    afin de charger une image présente dans un répertoire img de mon package...

    tout fonctionne, sauf lors de l'exportation vers un jar ! lors de l'exécution du jar, ça donne un nullpointer sur le ImageIcon...


  2. #2
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    120
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 120
    Par défaut
    il faut rajouter un /

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    URL url = this.getClass().getResource("/img" + SUB + "ico.jpg");
    cf la faq

  3. #3
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    Citation Envoyé par cameleon2002
    il faut rajouter un /
    non ça ne marche pas.....


    pis de toute façon le répertoire img est dans mon package (c'est le répertoire sebpiller/chat/client/img)

  4. #4
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    120
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 120
    Par défaut
    et les fichier images se trouves bine dans ton jar ?

  5. #5
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    Citation Envoyé par cameleon2002
    et les fichier images se trouves bine dans ton jar ?
    vi vi j'ai déjà vérifié

  6. #6
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    120
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 120
    Par défaut
    Bizarre alors j'utilise tous le temps cette methode et jamais eu de probleme ...

    Regarde ce que vaut ton sub peut etre sinon je vois pas d'ou cela pourrais venir

  7. #7
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    bin je sais pas, mais SUB c'est un constante (System.getProperty("file.separator"); ), qui est censé représenter les sous-répertoires indépendamment du système, non ??!

  8. #8
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    120
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 120
    Par défaut
    oui mais bon, c'est la seul chose qui pourrais encore poser probleme.

  9. #9
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    le truc vraiment bizarre, c'est que ça marche sans problème en dehors du jar !!

    ' vais finir zinzin en faisant ce boulot !

    PS: fo changer quelque chose dans le manifest ? ou tu laisse seulement Main-Class et Manifest-Version ?

  10. #10
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    120
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 120
    Par défaut
    alors la je sais pas . Et si tu met le repertoire des images à l'endroit ou se trouves ton jar, est ce que cela fonctionne ?

  11. #11
    Membre expérimenté
    Inscrit en
    Juillet 2004
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 152
    Par défaut
    essaye avec ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    URL url = ClassLoader.getSystemResource("/img/ico.jpg");
    2 remarques :
    - le separateur est necessairement un "/"
    - si le "path" n'est pas prefixe par un slash, le system le prefixera par le nom du package de la classe

  12. #12
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    merci dude, je vais essayer de suite !

    juste une question:
    Citation Envoyé par dude
    - le separateur est necessairement un "/"
    ??

    c'est pas mieux avec System.getProperty("file.separator"); ?


  13. #13
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    alors, la méthode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    URL url = ClassLoader.getSystemResource("/img/ico.jpg");
    fonctionne encore moins que getClass().getResource() (elle marche même pas en dehors du jar)


  14. #14
    Membre expérimenté
    Inscrit en
    Juillet 2004
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 152
    Par défaut
    Citation Envoyé par Pill_S
    merci dude, je vais essayer de suite !

    juste une question:
    Citation Envoyé par dude
    - le separateur est necessairement un "/"
    ??

    c'est pas mieux avec System.getProperty("file.separator"); ?

    D'apres la doc de la classe ClassLoader :
    public URL getResource(String name)
    Finds the resource with the given name. A resource is some data (images, audio, text, etc) that can be accessed by class code in a way that is independent of the location of the code.

    The name of a resource is a '/'-separated path name that identifies the resource.

    This method will first search the parent class loader for the resource; if the parent is null the path of the class loader built-in to the virtual machine is searched. That failing, this method will invoke findResource(String) to find the resource.


    Parameters:
    name - The resource name
    Returns:
    A URL object for reading the resource, or null if the resource could not be found or the invoker doesn't have adequate privileges to get the resource.
    Since:
    1.1
    Et je viens de relire un peu le fil : ton repertoire /img est au niveau de ta classe, donc, ce serait plutot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    URL url = ClassLoader.getSystemResource("img/ico.jpg");
    (sans le slash initial)

  15. #15
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    Citation Envoyé par dude
    ton repertoire /img est au niveau de ta classe, donc, ce serait plutot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    URL url = ClassLoader.getSystemResource("img/ico.jpg");
    (sans le slash initial)
    oui, j'ai essayé comme ça aussi, et avec ma variable SUB, et aussi d'autres trucs, mais y'a rien a faire, cette méthode me renvoie toujours null, en dedans ou en dehors du jar...

  16. #16
    Membre Expert
    Avatar de Ioan
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    737
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 737
    Par défaut
    Bonjour,
    Pourquoi vous avez changé de méthode en cours de route ?
    Exemple :

    Structure jar :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    monPackage
     ->Test.class
     ->images
         ->image.gif
    Classe de test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    package monPackage;
    import java.awt.*;
    import javax.swing.*;
    import java.net.*;
    public class Test extends JFrame{ 
    	private URL url;
    	private Image image; 
    	public Test(){ 
    		super("Test");
     
    		try{
    			url = getClass().getResource("images/image.gif");
    			// ici on utiliserais plutôt le Toolkit
    			// comme indiqué dans la FAQ, partie "images"
    			image = new ImageIcon(url).getImage();
    		}catch(Exception e){
    			e.printStackTrace();	
    		}
     
    		JLabel label = new JLabel(new ImageIcon(image));
    		getContentPane().add(label);
     
    		pack();
    		setLocationRelativeTo(null); 
    		setDefaultCloseOperation(EXIT_ON_CLOSE); 
    		setVisible(true);
    	}
    	public static void main(String[] args){
    		new Test();
    	} 
    }
    Manifeste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Manifest-Version: 1.0
    Main-Class: monPackage.Test
    Created-By: ved
    Bonne chance.
    @+
    Les FAQs Java, J2EE, JDBC, Struts > Les cours > Le Forum Java.
    Merci de respecter les règles du club.
    Mon blog : quelques news sur Java, Linux et le monde de l'Open Source.

  17. #17
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    merci pour ton message vedaer.

    j'utilise la même structure que celle que tu as utilisé pour ton exemple.

    Cela fonctionne très bien lorsque je suis à l'extérieur d'un jar, mais dès que je met cela dans un jar, je me retrouve avec l'url à null... ??

    ' comprend rien du tout, la méthode ClassLoader.getSystemResource ne fonctionne nul part et la getClass().getResource() uniquement en dehors des jar... Pourtant, je l'avais déjà utilisée avant, cette méthode, et ça s'était bien passé !

    je me demande si c'est moi qui bug ou bien mon jdk...

  18. #18
    Membre Expert
    Avatar de Ioan
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    737
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 737
    Par défaut
    Salut,
    Mon code fonctionne, ca c'est certain
    Essaye le, il est simple et prend à peine une petite minute à compiler/packager/lancer.
    Vérifie encore une fois ta manière de compiler/packager, les chemins ou l'orthographe. Ca ne peut pas être autre chose.
    Au pire, reprend ca demain, t'y verra plus clair. C'est toujours comme ca avec les pb de path.
    Bonne chance.
    @+
    Les FAQs Java, J2EE, JDBC, Struts > Les cours > Le Forum Java.
    Merci de respecter les règles du club.
    Mon blog : quelques news sur Java, Linux et le monde de l'Open Source.

  19. #19
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    Citation Envoyé par vedaer
    Mon code fonctionne, ca c'est certain
    oui, je ne remettais pas en doute ton code

    d'ailleur je l'ai testé il marche parfaitement, pour les jar aussi

    alors je me suis demandé où était la différence entre ton code et le mien, et en fait il se trouve que j'utilise la méthode System.getProperty("file.separator"); pour spécifier les sous-répertoires (et pas toi)

    Maintenant je met un slash tout bête et ça marche tip top !

    C'est quand même bizarre qu'une méthode censée améliorer la portabilité des programme la dégrade...

    Enfin voilà, si des fois je pense que ça peut-être une bonne Notae Bene pour la FAQ


  20. #20
    Membre Expert
    Avatar de Ioan
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    737
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 737
    Par défaut
    Salut,
    C'est quand même bizarre qu'une méthode censée améliorer la portabilité des programme la dégrade..
    La il y a malentendu.
    Cette méthode est faite pour être utilisée avec un système de fichiers. C'est à dire que tu peux récupérer le separateur de dossiers selon la plateforme. C'est fait pour être utilisé avec des File.
    Par contre, la méthode getResource prends en argument un chemin dont chaque rep est séparé par un /. Et ceci quelque soit la plateforme utilisée. De plus dude avais même fais l'effort de te le souligner en gras.
    Pour résumer, tu as tout simplement mal lu la javadoc.
    @+
    Les FAQs Java, J2EE, JDBC, Struts > Les cours > Le Forum Java.
    Merci de respecter les règles du club.
    Mon blog : quelques news sur Java, Linux et le monde de l'Open Source.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Chargement de ressources dans un jar externe
    Par SQUAL dans le forum Langage
    Réponses: 1
    Dernier message: 13/01/2012, 16h51
  2. Resource folder dans un JAR exécutable
    Par Methode dans le forum Langage
    Réponses: 4
    Dernier message: 26/10/2011, 14h56
  3. Resources exportées dans un .jar
    Par Mo777 dans le forum Langage
    Réponses: 4
    Dernier message: 03/09/2010, 13h38
  4. [JAR] Accéder à une resource contenue dans un jar
    Par Blo0d4x3 dans le forum Général Java
    Réponses: 4
    Dernier message: 17/02/2006, 08h29
  5. [jar] BufferedImage issue d'un .jpeg dans un jar
    Par tit_henry dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 13/05/2004, 10h09

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