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

Langage Java Discussion :

[débutant] Edition du manifest dans le .jar


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 25
    Points : 10
    Points
    10
    Par défaut [débutant] Edition du manifest dans le .jar
    Bonjour à tous!
    Je travaille sur un projet d'analyses d'images avec Eclipse.
    J'ai un programme JAVA que Pseudocode m'a proposé et me servant à extraire les classes de couleurs et à compter les pixels les contenant d'une image:
    Code JAVA : 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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    package color;
     
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.Map;
     
    import javax.imageio.ImageIO;
     
    public class colorcounter{
     
    	public static void main(String[] args) {
     
    		// lecture de l'image
    		BufferedImage image = null; 
    		try {
    			image = ImageIO.read(new File("26.jpg"));
    		} catch (IOException e) {
    			e.printStackTrace();
    			return;
    		}
     
    		// Map (rgb)=>count
    		Map<Integer, Integer> rgbmapcount = new HashMap<Integer, Integer>();
     
    		// parcours des pixels de l'image, et creation/mise a jour de la Map
    		for(int y=0;y<image.getHeight();y++) {
    			for(int x=0;x<image.getWidth();x++) {
    				// valeur [a]rgb, codé sur un entier (4 octets)
    				int rgb = image.getRGB(x,y);
     
    				// recherche dans la map
    				if (!rgbmapcount.containsKey(rgb)) {
    					rgbmapcount.put(rgb, 1); // n'existe pas => creation
    				} else {
    					int previouscount = rgbmapcount.get(rgb);
    					rgbmapcount.put(rgb, previouscount+1); // n'existe => mise a jour
    				}
    			}
    		}
     
    		// Combien de couleurs apparaissent plus de 10 fois ?
    		int distinctcolor=0;
    		int pixelcount=0;
    		for(int rgb:rgbmapcount.keySet()) {
    			int rgbcount = rgbmapcount.get(rgb);
    			if (rgbcount<10) continue;
    			distinctcolor++;
    			pixelcount+=rgbcount;
    		}
    		System.out.println("nombre de couleurs distinctes: "+distinctcolor);
    		System.out.println("nombre de pixels: "+pixelcount);
     
    		// Richesse de la palette
    		double U =  (double)distinctcolor / pixelcount;
    		System.out.println("Richesse de la palette: "+U);
    	}
     
    }
    Lors de l'exécution de ce programme, j'ai ce message:
    javax.imageio.IIOException: Can't read input file!
    at javax.imageio.ImageIO.read(Unknown Source)
    at color.colorcounter.main(colorcounter.java:18)
    J'ai donc pensé qu'il fallait créer dans le bin du Jdk un fichier .jar contenant la classe concernée et les images à analyser, ce que j'ai fait. (image.jar)
    Mais il me faut aussi pour rendre cette archive exécutable modifier le Manifest
    (créé par défaut lors de la création de l'archive .jar) pour y introduire le nom de la class concerné.
    MANIFEST (.txt):
    Manifest-Version 1.0

    Created by: Tonio

    Main-Class: colorcounter
    avec le saut de page à la dernière ligne.
    Je tape donc en ligne de cde: jar cvfm image.jar MANIFEST.MF colorcounter.class 26.jpg

    J'obtient un message:

    J'ai cherché partout sur le net, dans les TUTO, avec Mr Google et surtout ici même mais sans rien trouver de vraiment explicite.
    Les fichiers Manifest ne sont manifestement pas très intéressants (je sais elle était facile )
    Aie-je fait une erreur dans l'intitulé? manifest.mf ou manifest.txt ou ????
    Ou alors me gourre-je ailleurs??
    Faut-il dans le manifeste à la ligne Main-Class préciser le package?
    Dois-je aussi préciser le Class-Path?
    M'enfin, si déjà il ne reconnait pas mon manifeste....
    Merci pour votre aide, si j'arrive (enfin!) à éxecuter mon code, je ferais un ajout à la FAQ pour expliquer la méthode en détail, car j'ai remarqué en surfant ici et là que nombre de débutants rament sur cette question de l'utilisation des images avec Eclipse.....

    Amicalement

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    D'après tes screenshot le fichier MANIFEST.MF se situe dans le répertoire META-INF, or tu ne précises pas son chemin dans la ligne de commande...


    Par contre je ne comprend pas pourquoi tu veux changer le manifest !!!???
    L'erreur original semble plutôt indiqué que le fichier de l'image n'est pas trouvé...

    a++

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Salut,


    D'après tes screenshot le fichier MANIFEST.MF se situe dans le répertoire META-INF, or tu ne précises pas son chemin dans la ligne de commande...


    Par contre je ne comprend pas pourquoi tu veux changer le manifest !!!???
    L'erreur original semble plutôt indiqué que le fichier de l'image n'est pas trouvé...

    a++
    Merci adiGuba pour ta réponse,
    A l'exécution sous Eclipse, j'ai donc ce message d'erreur indiquant que le fichier image n'est pas trouvé.
    Où dois-je donc mettre ce f***** fichier image pour qu'il soit lu correctement??Avec le fichier .class??
    Dans le répertoire bin??

    En désespoir de cause, j'ai voulu créer une archive jar exécutable avec tout le tintoin..... mais même en indiquant le chemin \bin\image.jar\META-INF\MANIFEST.MF, le fichier spécifié est introuvable......
    J'ai lu dans un autre forum qu'il était possible de modifier le manifest en l'extrayant avec Winzip, créer la ligne de la classe [package\sous package\classe sans extension], sauvegarder, et faire un drag and drop du fichier sauvegardé en gardant la fenêtre Winzip ouverte.
    Est-ce possible selon toi??

  4. #4
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par onzeaout Voir le message
    Merci adiGuba pour ta réponse,
    A l'exécution sous Eclipse, j'ai donc ce message d'erreur indiquant que le fichier image n'est pas trouvé.
    Où dois-je donc mettre ce f***** fichier image pour qu'il soit lu correctement??Avec le fichier .class??
    Dans le répertoire bin??
    Ben puisque dans ton code tu as :
    Cela représente le fichier "26.jpg" dans le répertoire courant...

    Tu prends le problème à l'envers : tu écris du code et tu cherches où mettre le fichier !!!

    Il faut plutôt positionner ton fichier où tu souhaite qu'il soit et l'indiquer dans le code (fichier, ressources dans un jar, URL, etc...)

    Citation Envoyé par onzeaout Voir le message
    J'ai lu dans un autre forum qu'il était possible de modifier le manifest en l'extrayant avec Winzip, créer la ligne de la classe [package\sous package\classe sans extension], sauvegarder, et faire un drag and drop du fichier sauvegardé en gardant la fenêtre Winzip ouverte.
    Est-ce possible selon toi??
    Oui un fichier Jar est une archive ZIP...

    Mais je n'ai toujours pas compris pourquoi tu veux modifier la manifest...

    a++

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    Il faut plutôt positionner ton fichier où tu souhaite qu'il soit et l'indiquer dans le code (fichier, ressources dans un jar, URL, etc...)
    Oui, c'est vrai que je prend le pb à l'envers!!
    Mais je ne sais pas comment écrire ma ligne pour que mon image soit lue.
    Elle se trouve dans le répertoire:
    C:\Sun\sdk\jdk\bin
    Que dois-je mettre à la place de ceci:
    Code JAVA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // lecture de l'image
    		BufferedImage image = null; 
    		try {
    			image = ImageIO.read(new File("26.jpg"))
    Si cela marche, plus besoin normalement de m'embêter avec l'édition du manifest, non??

    Mais je n'ai toujours pas compris pourquoi tu veux modifier la manifest
    En fait, c'était une façon pour moi d'essayer de contourner ce problème de lecture de l'image en éditant le manifeste par défaut créé lors de la création de mon .jar, que je voulais exécutable directement (en indiquant la classe, etc...).
    Est-ce possible et réalisable??
    Merci

  6. #6
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par onzeaout Voir le message
    Elle se trouve dans le répertoire:
    C:\Sun\sdk\jdk\bin
    Drôle d'emplacement pour une image !

    Si tu lances ton programme depuis ce répertoire alors le programme devrait marcher. Sinon il va falloir spécifier le chemin complet...

    a++

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    Oui, en fait j'en ai mise quelques-une ici pour me simplifier la tâche lors de mon essai de création du jar....
    Mon problème est dans la rédaction du chemin d'accès à l'image dans mon code sous Eclipse, sûrement rien de bien compliqué, mais étant novice en Java, j'ai un peu de mal!
    Que dois-je écrire, selon toi??

    Si tu lances ton programme depuis ce répertoire alors le programme devrait marcher. Sinon il va falloir spécifier le chemin complet...
    Donc, en ligne de commande je devrais écrire: sun\sdk\jdk\bin>java colorcounter
    Cela suffit? Ne dois-je pas préciser le chemin d'accès à ma classe? Ou peut-être dois-je mettre ma classe dans ce fichier??
    Merci pour ta patience

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    Bon, j'ai essayé de lancer le programme depuis ma ligne de commande:

    Je commence à désespérer d'obtenir quelquechose....
    Voilà une semaine que je rame sur le chargement de cette malheureuse image, j'ai survolé en long en large et en travers le net, trouvé plein de FAQ, tutos, aides en tous genre mais aucun n'est véritablement complet pour un débutant comme moi: il manque toujours un élément ou une explication est obscure car pas assez détaillée ou il y a même des contradictions entre différents forums...

    Reprenons depuis le début, et dans l'ordre:
    1) j'ai mes images stockées disons dans: c:\Documents and Settings\bureau\images
    2) j'ai un code de traitement d'images que je compile et éxecute avec Eclipse.
    Code JAVA : 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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    package color;
     
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.Map;
     
    import javax.imageio.ImageIO;
     
    public class colorcounter{
     
    	public static void main(String[] args) {
     
    		// lecture de l'image
    		BufferedImage image = null; 
    		try {
    			image = ImageIO.read(new File("26.jpg"));
    		} catch (IOException e) {
    			e.printStackTrace();
    			return;
    		}
     
    		// Map (rgb)=>count
    		Map<Integer, Integer> rgbmapcount = new HashMap<Integer, Integer>();
     
    		// parcours des pixels de l'image, et creation/mise a jour de la Map
    		for(int y=0;y<image.getHeight();y++) {
    			for(int x=0;x<image.getWidth();x++) {
    				// valeur [a]rgb, codé sur un entier (4 octets)
    				int rgb = image.getRGB(x,y);
     
    				// recherche dans la map
    				if (!rgbmapcount.containsKey(rgb)) {
    					rgbmapcount.put(rgb, 1); // n'existe pas => creation
    				} else {
    					int previouscount = rgbmapcount.get(rgb);
    					rgbmapcount.put(rgb, previouscount+1); // n'existe => mise a jour
    				}
    			}
    		}
     
    		// Combien de couleurs apparaissent plus de 10 fois ?
    		int distinctcolor=0;
    		int pixelcount=0;
    		for(int rgb:rgbmapcount.keySet()) {
    			int rgbcount = rgbmapcount.get(rgb);
    			if (rgbcount<10) continue;
    			distinctcolor++;
    			pixelcount+=rgbcount;
    		}
    		System.out.println("nombre de couleurs distinctes: "+distinctcolor);
    		System.out.println("nombre de pixels: "+pixelcount);
     
    		// Richesse de la palette
    		double U =  (double)distinctcolor / pixelcount;
    		System.out.println("Richesse de la palette: "+U);
    	}
     
    }
    3) La ligne incomplète semble-t'il de mon code se trouve ici:
    Code JAVA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    try {
    			image = ImageIO.read(new File("26.jpg"));
    Où je dois donc spécifier le chemin jusqu'à cette image.

    Ma question est simple:
    Que dois-je écrire de plus dans ma ligne de code incomplète qui puisse me mener jusqu'à mon image et éxécuter mon code (sans passer par la ligne de commande).

    Punaise, si quelqu'un me donne une réponse qui fait fonctionner mon code, alors là
    Et je compléterais la FAQ, promis juré!

  9. #9
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Le problème vient du fait que tu ne lances pas le programme correctement.
    Le nom de la classe doit contenir le package, donc dans ton cas color.colorcounter.

    [code]java color.colorcounter

    Et tu dois te situer dans le répertoire contenant le répertoire "color" représentant le package, ou bien spécifier le classpath...


    Quand au fichier, si tu veux un chemin précis tu dois l'indiquer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new File ("c:\\Documents and Settings\\bureau\\images\\26.jpg")
    a++

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    Merci adiGuba pour toutes ces précisions.
    Mon problème est résolu, j'ai utilisé le plug-ins Fat-Jar d'Eclipse, simple, rapide, efficace.
    Il m'a créé mon fichier.jar en deux coups de cuillère à pot avec toute la ribambelle de fichiers nécéssaires et correctement renseignés (le manifest, la classe etc...)
    J'ai mis toutes mes images dans mon dossier workspace\colorcounter et je peux lancer l'éxecution depuis Eclipse sans problèmes.

    Chose promise, chose due, dès ce soir je fais une MAJ dans la FAQ concernée en détaillant pas à pas la procédure pour les débutants.
    Quand on est novice, rien de plus rageant que de buter sur un problème simple mais insolvable.

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

Discussions similaires

  1. [ANT] Débutant : inclure des libs dans un JAR
    Par Tino13 dans le forum ANT
    Réponses: 4
    Dernier message: 29/01/2008, 14h31
  2. [JAR]Fichier manifest dans un jar
    Par nicoo dans le forum Général Java
    Réponses: 2
    Dernier message: 10/03/2005, 09h51
  3. [Débutant] Triage de données dans un String
    Par Poilou dans le forum C++Builder
    Réponses: 4
    Dernier message: 29/01/2004, 17h21
  4. [Edit] Adresse IP dans un champ Edit
    Par slowpoke dans le forum Composants VCL
    Réponses: 7
    Dernier message: 05/12/2003, 21h32
  5. Editions de colones dans les ListView
    Par GrosChat dans le forum MFC
    Réponses: 7
    Dernier message: 27/03/2003, 11h28

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