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

AWT/Swing Java Discussion :

Export Jar Image


Sujet :

AWT/Swing Java

  1. #1
    Membre du Club
    Homme Profil pro
    Alternance
    Inscrit en
    février 2019
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Alternance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : février 2019
    Messages : 51
    Points : 40
    Points
    40
    Par défaut Export Jar Image
    Bonjour,

    Je suis entrain de développer une application en java pour un client, et je voudrai lui monter les avancements sauf que quand je veux exporter l'archive, mes images ne s'exportent pas et je ne comprend pas pourquoi ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    image1 = new ImageIcone("./Other/Image/363639-200.png");
    J'ai essayé avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    image1 = new ImageIcone(MaClasse.class.getResource("./Other/Image/363639-200.png"));
    Mais cela fonctionne pas j'ai une erreur nulPointerException donc mon chemin n'est pas bon mais je ne vois pas pourquoi ?

    Cordialement

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    septembre 2009
    Messages
    12 399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    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 399
    Points : 29 010
    Points
    29 010
    Billets dans le blog
    2
    Par défaut
    Salut,

    La première syntaxe ne peut pas fonctionner avec un jar, parce que le paramètre est censé être un chemin de fichier.

    La deuxième syntaxe génère une URL en cherchant dans les packages l'entrée. Premièrement les noms de package étant conventionnellement en minuscules, il pourrait y avoir un problème de casse : Other/Image n'est pas other/image. Le mieux par rapport à la convention c'est de tout mettre en minuscules. En plus tu n'auras pas d'effet sournois entre Windows et Linux, par rapport au fait que sous Windows, les chemins ne sont pas sensibles à la casse (donc peut fonctionner en exécution avec une arborescence de fichiers, donc dans l'EDI, mais pas sous forme de jar).
    Ensuite, bien sûr, l'emplacement du package est important. other.image doit être un package comme s'il contenait des classes de ton programme.

    La recherche se fait
    1. soit de façon absolue par rapport à la racine
      le chemin commence par un /. Il faut donc qu'il y ait un package other/image dans l'arborescence de classes :
      • jesaispasquoi/ImageIcone.class
      • other/image/363639-200.png
    2. soit de façon relative au package de la classe
      • jesaispasquoi/ImageIcone.class
      • jesaispasquoi/other/image/363639-200.png

    N'utilise pas de chemin avec ./. Cela ne sert à rien et c'est trompeur : ton chemin est considéré comme relatif, donc ça veut dire une arbo du genre
    • truc/jesaispasquoi/ImageIcone.class
    • truc/other/image/363639-200.png

    Le plus simple et global est d'avoir un package pour les ressources, et faire un accès toujours absolu, ou mettre éventuellement une classe d'accès aux ressources dans le package qui contient les ressources, avec un accès relatif (ce qui te permet facilement de faire de la refactorisation/renommage de package).
    • monapp/resources/image/Icons.class
    • monapp/resources/image/363639-200.png


    A vérifier dans le jar que l'image (le fichier) est bien présente au bon endroit. Tu utilises quoi comme EDI pour exporter ton jar ?
    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 du Club
    Homme Profil pro
    Alternance
    Inscrit en
    février 2019
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Alternance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : février 2019
    Messages : 51
    Points : 40
    Points
    40
    Par défaut
    Bonjour,

    Je viens de voir votre message je vais essayer dans la soirée je ne suis pas chez moi. J'utilise Eclipse comme IDE

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    septembre 2009
    Messages
    12 399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    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 399
    Points : 29 010
    Points
    29 010
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par WiZarD67 Voir le message
    J'utilise Eclipse comme IDE
    Il faut bien inclure les dossiers de ressources dans le classpath. Le plus simple étant de les mettre directement dans un dossier de sources.

    1. en jar classique, il faut bien veiller que dans la section "Select the resources to export", le dossier des ressources soit bien exporté. Normalement, c'est pas défaut dans un dossier dans les sources, mais il peut arriver selon les manipulations que le dossier, ou ses fichiers, soit décochés.
    2. En runnable, le problème peut venir de la construction du jar runnable et de la façon d'inclure des bibliothèques. Malheureusement, il n'y a pas moyen de choisir fichier par fichier ce qu'on veut inclure dans le jar. Je suppose qu'il se base sur les mêmes mécanismes qui sont utilisés pour sélectionner les fichiers dans le mode "jar file" classique. On peut choisir ensuite l'automatisme de gestion des bibliothèques. Il faut choisir le mode "Extract required libraries into generated Jar" : il semble que dans le cas contraire, les dossiers de ressources peuvent ne pas être inclus. Et ça sera aussi le cas, si ces dossiers sont montés dans le build path comme un dossier à part des sources.
    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.

  5. #5
    Membre du Club
    Homme Profil pro
    Alternance
    Inscrit en
    février 2019
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Alternance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : février 2019
    Messages : 51
    Points : 40
    Points
    40
    Par défaut
    j'ai suivie ce que tu m'as dit et j'ai créé un packages other et j'ai toutes mes images dedans. Maintenant par exemple other/image.png. Par contre je ne comprend pas comment appeler mon image maintenant ?

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    septembre 2009
    Messages
    12 399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    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 399
    Points : 29 010
    Points
    29 010
    Billets dans le blog
    2
    Par défaut
    1. Une solution simple et classique parmi d'autres, qui doit correspondre à ton cas :

      Nom : Capture.JPG
Affichages : 78
Taille : 18,7 Ko

      Main.java
      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
      package mypackage.mysubpackage;
       
      import javax.swing.JFrame;
      import javax.swing.JLabel;
       
      import resources.images.Icons;
       
      public class Main {
       
      	public static void main(String[] args) {
       
      		JFrame frame = new JFrame("Exemple");
      		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       
      		frame.add(new JLabel(Icons.getIcon(Icons.SURICATE)));
       
      		frame.pack();
      		frame.setLocationRelativeTo(null);
      		frame.setVisible(true);
       
      	}
       
      }
      Icons.java
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      package resources.images;
       
      import javax.swing.Icon;
      import javax.swing.ImageIcon;
       
      public class Icons {
       
      	public static final String SURICATE = "suricate.jpg";
       
      	public static Icon getIcon(String name) {
      		return new ImageIcon(Icons.class.getResource(name));
      	}
       
      }
      Voir demoicon.7z ci-joint (contient un jar runnable).
    2. Une solution que je préfère personnellement :

      Nom : Capture.JPG
Affichages : 76
Taille : 18,4 Ko

      Main.java
      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
      package mypackage.mysubpackage;
       
      import javax.swing.JFrame;
      import javax.swing.JLabel;
       
      import resources.images.Icon;
       
      public class Main {
       
      	public static void main(String[] args) {
       
      		JFrame frame = new JFrame("Exemple");
      		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       
      		frame.add(new JLabel(Icon.SURICATE));
       
      		frame.pack();
      		frame.setLocationRelativeTo(null);
      		frame.setVisible(true);
       
      	}
       
      }
      Icon.java
      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
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      package resources.images;
       
      import java.awt.Component;
      import java.awt.Graphics;
       
      import javax.swing.ImageIcon;
       
      public enum Icon implements javax.swing.Icon {
       
      	SURICATE("suricate.jpg"),
      	;
       
      	private final ImageIcon icon;
       
      	private Icon(String name) {
      		icon = getIcon(name);
      	}
       
      	private static ImageIcon getIcon(String name) {
      		return new ImageIcon(Icon.class.getResource(name));
      	}
       
      	@Override
      	public void paintIcon(Component c, Graphics g, int x, int y) {
      		icon.paintIcon(c, g, x, y);
      	}
       
      	@Override
      	public int getIconWidth() {
      		return icon.getIconWidth();
      	}
       
      	@Override
      	public int getIconHeight() { 
      		return icon.getIconHeight();
      	}
       
      	public ImageIcon getImageIcon() {
      		return icon;
      	}
       
      }
      voir demoicon2.7z (contient un jar runnable)


    L'affichage est le même dans les deux cas (ici à partir du jar) :
    Nom : Capture.JPG
Affichages : 73
Taille : 13,7 Ko

    J'ai mis les ressources (les fichiers images) dans le même dossier que la classe qui permet de les appeler : pas de question à se poser sur le chemin (slash, ou pas, quel dossier, etc), c'est le nom du fichier, c'est tout. Ensuite, l'accès se fait par la classe, donc comme pour n'importe quelle autre classe, import/import static ou nom complet.
    L'implémentation par enum permet d'avoir par la même instance, la constante qui représente l'icône, l'icône et on peut facilement faire des listes, ou maps. Chaque image est chargée qu'une seule fois, sans avoir à gérer une map (ce qu'il faudrait faire dans l'autre implémentation pour l'éviter). On écrit aussi moins de code pour chaque icône, surtout si on a de nombreuses icônes.
    Fichiers attachés Fichiers attachés
    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.

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

Discussions similaires

  1. Export Running Jar, problème d'export des images
    Par theboss25 dans le forum Interfaces Graphiques en Java
    Réponses: 1
    Dernier message: 02/11/2014, 15h28
  2. Problème exportation JAR avec images
    Par oliwan dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 22/06/2009, 20h08
  3. Réponses: 6
    Dernier message: 17/04/2005, 10h58
  4. Problème d'exportation jar : où est mon répertoire bin ?
    Par fredcontin dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 25/05/2004, 16h57
  5. [canvas] exporter en image
    Par Invité(e) dans le forum Composants
    Réponses: 3
    Dernier message: 25/01/2004, 11h03

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