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 :

[JaVa] Problème compilation


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 1
    Par défaut [JaVa] Problème compilation
    Bonjour, j'ai un probleme au niveau de mon projet en java. La compilation s’exécute parfaitement, seulement, si j’exécute le programme via le JAR ca me met "Le sprite xxxx est inconnu", donc en gros il n'arrive pas a acceder au dossier de mes images.. Je pense que le problème vient du Hashmap, puisqu'il m'arrive souvent de redéfinir le dossier de la librairie quand j'ouvre le programme. Je suis pas mal paumé la .

    Voici la classe Sprite:

    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
    43
    44
    45
    package iut;
    import java.awt.Graphics;
    import java.awt.Image;
     
    /**
     * Une classe représentant un Sprite, c'est à dire une image mouvante (personnage, objet, etc...)
     */
    public class Sprite {
        private Image image; /**< l'image dessinée par le sprite */
     
        /**
         * Crée un nouveau sprite à partir d'une image
         * @param i l'image de départ
         */
        public Sprite(Image i)
        {
            image = i;
        }
     
        /**
         * @return la largeur du sprite     
         */
        public int getWidth(){
            return image.getWidth(null);
        }
     
        /**
         * @return la hauteur du sprite
         */
        public int getHeight(){
            return image.getHeight(null);
        }
     
        /**
         * Dessine le sprite
         * @param g la surface d'affichage
         * @param x la position gauche du sprite
         * @param y la position haute du sprite
         */
        public void draw(Graphics g, int x, int y)
        {
            g.drawImage(image,x,y,null);
        }
     
    }
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    package iut;
     
    import java.awt.GraphicsConfiguration;
    import java.awt.GraphicsEnvironment;
    import java.awt.Image;
    import java.awt.Transparency;
    import java.awt.image.BufferedImage;
    import java.io.IOException;
    import java.net.URL;
    import java.util.HashMap;
    import javax.imageio.ImageIO;
     
    /**
     * Singleton permettant de construire ou récupérer les sprites à partir de leur nom
     * Le nom du sprite doit correspondre à un fichier .png
     * @SuppressWarnings("unchecked")
     */
    public class SpriteStore {
        private static SpriteStore instance=null;
        private SpriteStore()     {        
        }
     
        public static SpriteStore get() {
            if(instance==null) instance=new SpriteStore();
            return instance;
        }
     
        private HashMap sprites = new HashMap();
     
        /**
         * Fournit un sprite à partir de son nom
         * @param nom le nom symbolique du sprite
         * @return le sprite construit
         * @throw Exception si le sprite de ce nom n'existe pas ou ne peut pas etre chargé
         */
        public Sprite getSprite(String nom) throws Exception
        {
            Sprite sprite=(Sprite)sprites.get(nom);
            if(sprite==null) // pas encore chargé
                sprite = loadSprite(nom);
            return sprite;
        }
     
        private Sprite loadSprite(String nom) throws Exception
        {
            Sprite sprite=null;
            BufferedImage sourceImage = null;
     
            try {			
                    URL url = this.getClass().getClassLoader().getResource(nom+".png");			
                    if (url == null) {
                            throw new Exception("Le sprite "+nom+" est inconnu.");
                    }
                    sourceImage = ImageIO.read(url);
            } catch (IOException e) {
                    throw new Exception("Le sprite "+nom+" ne peut etre chargé");
    	}
     
            GraphicsConfiguration gc = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration();
            Image image = gc.createCompatibleImage(sourceImage.getWidth(),sourceImage.getHeight(),Transparency.BITMASK);
     
            image.getGraphics().drawImage(sourceImage,0,0,null);
     
            sprite = new Sprite(image);
            sprites.put(nom,sprite);
            return sprite;
        }
    }
    La methode qui appelle ces classes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    protected int x;  /**< Abssisse courante */
    protected int y; /**< Ordonnée courante */
    protected int hauteur;  /**< Hauteur du sprite */
    protected int largeur;  /**< Largeur du sprite */
    protected String image;  /**< Nom de l'image du sprite */
     
    public void draw(Graphics g) throws Exception 
        {    
            Sprite s = SpriteStore.get().getSprite(image);
            s.draw(g, x, y);
            hauteur = s.getHeight();
            largeur = s.getWidth();
        }
    Merci pour votre aide

  2. #2
    Membre Expert
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Par défaut
    Peut-être la solution :
    Dans votre méthode loadSprite de votre classe SpriteStore, essayez de construire votre URL ainsi :
    URL url = this.getClass().getClassLoader().getResource("/"+nom+".png");

    Attention, ceci suppose que le fichier nom.png a été embarqué dans le jar de l'application, et qu'il se trouve à la racine de l'archive.
    Pour être franc, je n'ai pas vérifié, mais de souvenir, j'ai utilisé getRessource et getRessourceAsStream dans le même esprit et j'avais remarqué que dans un cas, le chemin ne nécessitait pas de commencer par le caractère '/', mais qu'il était indispensable dans l'autre. Le problème, c'est que je ne me souviens jamais duquel...
    Bref, pour pouvoir vous aider plus, il me faudrait avoir un visuel de l'arborescence de votre application.
    Quoi qu'il en soit, je penses que votre problème se trouve clairement dans la construction de votre URL.
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

Discussions similaires

  1. Débutant en JAVA, problème de compilation
    Par dylanms dans le forum Débuter avec Java
    Réponses: 12
    Dernier message: 13/12/2007, 22h32
  2. Problème compilation (toolkit Maximum Entropy)
    Par yannick_frere dans le forum MFC
    Réponses: 4
    Dernier message: 07/03/2005, 09h47
  3. Problème compilation Version 8.0.1 sous Debian Sarge
    Par LIndien dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 04/02/2005, 21h38
  4. [Eclipse][Java]Problème de compilation sur CTRL+S
    Par ZeKiD dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 27/05/2004, 11h49
  5. [Kylix] problème compilation kylix3 avec redhat 9.0
    Par madininaoursa dans le forum EDI
    Réponses: 1
    Dernier message: 02/07/2003, 16h21

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