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

Interfaces Graphiques en Java Discussion :

Image qui ne veut pas s'afficher


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 20
    Points : 12
    Points
    12
    Par défaut Image qui ne veut pas s'afficher
    Bonsoir à tous.
    Je suis actuellement en train de développer une application java et je me rends compte d'un bug sur le chargement de certaines images.

    Donc pour situer le contexte je dois réaliser une application pour gérer des machines en Java et derrière j'ai un espace admin en PHP qui met à jour la BDD. Donc je code le logiciel, je corrige les derniers bugs tout fonctionne.

    Et aujourd'hui avant dernier jour avant de remettre le logiciel, je me dis allé hop hp un dernier petit test rajoute un élément. Et là horreur, dès que j'essaie d'afficher une image bam, erreur java.

    sun.awt.image.ImageFormatException: Unsupported color conversion request
    at sun.awt.image.JPEGImageDecoder.readImage(Native Method)
    at sun.awt.image.JPEGImageDecoder.produceImage(Unknown Source)
    at sun.awt.image.InputStreamImageSource.doFetch(Unknown Source)
    at sun.awt.image.ImageFetcher.fetchloop(Unknown Source)
    at sun.awt.image.ImageFetcher.run(Unknown Source)

    En regardant l'erreur, j'ai l'impression que c'est une erreur de format sur un fichier jpeg. Sauf que le problème c'est que je ne lis que des .png. Sur certaines images, j'ai cette erreur. Pourtant j'ai vérifié les images snt bien présentes dans le dossier semble au bon format et sont affichables en php par exemple.

    Donc je met le code qui me permet d'afficher une image :
    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
    public class PanelImage extends JPanel {
     
    	public String image;
     
    	public PanelImage(String image) {
    		this.image = image;
    		setLayout(null);
    	}
     
    	public void paintComponent(Graphics g) {
    		Image icon = Toolkit.getDefaultToolkit().getImage("images/"+ image);
    		g.drawImage(icon, 0, 0, getWidth(), getHeight(), this);
    		//this.setPreferredSize(new Dimension(150, 150));
    	}
     
    	public void setImage(String image) {
    		this.image = image;
    		repaint();
    	}
     
    	public String getImage() {
    		return image;
    	}
     
    }
    et pour l'ajouter à ma JFrame je fais le classique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    PanelImage panelAccueil = new PanelImage("imageAccueil.png");
    //définitions des propriétés, genre la taille etc...
    //..
    //ajout
    mainLayout.add(panelAccueil);
    Si quelqu'un a une idée ou s'est déjà fait insulter de la sorte, un coup de main ne serait pas de refus.

    Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Tout d'abord je te recommande très fortement de ne pas charger l'image à chaque appel de paintComponent (pour des raisons de performances).

    Tu devrais plutôt charger l'image a préalable et plutôt par ImageIO.read (méthode synchrone, renvoyant des erreurs compréhensibles, tout ça, tout ça) que par Toolkit.getImage() (méthode historique, asynchrone donc n'assurant pas du chargement complet de l'image à son retour et renvoyant des exceptions incompréhensibles par moment, voir même aucune exception alors qu'aucune image n'a été chargée).

    Donc je te conseille plutôt un truc dans ce style:

    Pour ton PanelImage:
    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
     
    package im;
     
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.Image;
     
    import javax.swing.JPanel;
     
    public class ImagePanel extends JPanel {
        private Image image = null;
        private boolean streched = false;
     
        public ImagePanel(Image image) {
            this.image = image;
        }
     
        public void setImage(Image image) {
            this.image = image;
        }
     
        public Image getImage(Image image) {
            return image;
        }
     
        public void setStreched(boolean streched) {
            this.streched = streched;
        }
     
        public boolean isStreched() {
            return streched;
        }
     
        @Override
        public Dimension getPreferredSize() {
            if (image != null) {
                return new Dimension(image.getWidth(null), image.getHeight(null));
            }
            return super.getPreferredSize();
        }
     
        public void paintComponent(Graphics g) {
            super.paintComponent(g); // paint background
            if (image != null) {
                // there is a picture: draw it
                if (streched) {
                    g.drawImage(image, 0, 0, getWidth(), getHeight(), null);
                } else {
                    g.drawImage(image, 0, 0, null); // use image size
                }
            }
        }
     
    }
    Puis dans ta classe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Image im = ImageIO.read(getClass().getRessource("/chemin/classpoath/vers/imageAccueil.png");
    PanelImage panelAccueil = new PanelImage(im); 
    //définitions des propriétés, genre la taille etc... 
    //.. 
    //ajout 
    mainLayout.add(panelAccueil);

Discussions similaires

  1. Page PHP qui ne veut pas s'afficher
    Par skandhal dans le forum Langage
    Réponses: 18
    Dernier message: 30/11/2010, 15h25
  2. graphique qui ne veut pas s'afficher
    Par momoh dans le forum ASP.NET
    Réponses: 0
    Dernier message: 11/05/2009, 09h46
  3. STRSQL : DATE qui ne veut pas s'afficher
    Par TSalm dans le forum AS/400
    Réponses: 10
    Dernier message: 02/12/2008, 16h26
  4. Titre des images qui ne devrait pas être affiché
    Par sedrilo dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 5
    Dernier message: 19/08/2007, 20h31
  5. JList qui ne veut pas s'afficher
    Par hamham dans le forum Composants
    Réponses: 16
    Dernier message: 29/01/2007, 18h20

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