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 :

Problème affichage image gif


Sujet :

AWT/Swing Java

  1. #1
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    686
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 686
    Points : 118
    Points
    118
    Par défaut Problème affichage image gif
    Salut
    Je voudrais utiliser une image gif animé dans un JLabel
    L'image est bien affiché sauf qu'elle n'est pas animé.
    comment faire pour qu'elle soit animé?
    Pour charger mon image,j'utilise:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ImageIO.read(ClassLoader.getSystemResourceAsStream("images/"+imageName))

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

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut Une solution
    Essayez la même chose, mais avec un ImageIcon....

    Cela donnerait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ImageIcon image = new ImageIcon(ClassLoader.getSystemResource("images/"+imageName));
    VotreJLabel.setIcon(image);
    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/

  3. #3
    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,


    Et tu affiches l'image comment ???

    a++

  4. #4
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    686
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 686
    Points : 118
    Points
    118
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Salut,


    Et tu affiches l'image comment ???

    a++
    Salut adiGuba
    pour l'affichage ,j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    JXPanel progressPanel = new JXPanel(new GridBagLayout());
    		JLabel progressMessageLabel = new JLabel("Recherche en cours,veuillez patientez ...");
    	 	progressPanel.add(progressMessageLabel, new GridBagConstraints(0, 0, 2, 1, 1.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.HORIZONTAL, new Insets(12, 12, 11, 11), 0, 0));
    		progressPanel.add(new JLabel(new ImageIcon(Toolkit.getDefaultToolkit().getImage(getClass().getClassLoader().getResource("images/wait.gif")))), new GridBagConstraints(0, 1, 1, 1, 1.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0, 24, 11, 7), 0, 0));
     
     
    		JDialog waitDialog=new JDialog();
      	      waitDialog.setSize(300, 130);
    		waitDialog.setContentPane(progressPanel);

  5. #5
    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
    Mis à part la syntaxe assez lourde je ne vois pas de problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    new ImageIcon(Toolkit.getDefaultToolkit().getImage(getClass().getClassLoader().getResource("images/wait.gif")))
    // est équivalent à ceci :
    new ImageIcon(getClass().getClassLoader().getResource("images/wait.gif"))

    Tu n'aurais pas un traitement qui bloque le thread UI par hasard ? Les boutons/évènements répondent bien ?

    a++

  6. #6
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    686
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 686
    Points : 118
    Points
    118
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Mis à part la syntaxe assez lourde je ne vois pas de problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    new ImageIcon(Toolkit.getDefaultToolkit().getImage(getClass().getClassLoader().getResource("images/wait.gif")))
    // est équivalent à ceci :
    new ImageIcon(getClass().getClassLoader().getResource("images/wait.gif"))

    Tu n'aurais pas un traitement qui bloque le thread UI par hasard ? Les boutons/évènements répondent bien ?

    a++
    j'ai un traitement long (appel des EJB) mais il est encapsulé dans un SwingWorker.Déja avant d'integrer le swing worker, mon image gif n'est pas même afichée mais avec SwingWorker elle est affiché mais sans animation

  7. #7
    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
    Tu peux essayer avec un code minimum ?
    Tu pourrais uploader l'image quelque part ?

    a++

  8. #8
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    686
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 686
    Points : 118
    Points
    118
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Tu peux essayer avec un code minimum ?
    Tu pourrais uploader l'image quelque part ?

    a++
    voici mon image adiGuba,
    Images attachées Images attachées  

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

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut Désolé si je suis à coté de la plaque
    Avez-vous paramétré une allocation de mémoire spécifique pour lancer votre application ?
    Car en effet, vous semblez avoir pris toutes les précautions pour que cela fonctionne ?!
    Bref, comme vous précisez à la demande d'adiGuba qu'un traitement long est éffectué, pendant lequel vous désirez afficher cette forme de jauge, peut-être qu'un peu plus de mémoire allouée à la machine virtuelle pourrait aider ???
    Pardonnez-moi si je vous lance sur une mauvaise piste, en tout cas, pour ma part, je ne vois rien d'autre.
    En effet, adiGuba a fait le tour, il semblerait clairement que tout est conforme...

    Quoi qu'il en soit, pour savoir si c'est un problème de 'charge', il vous suffit de faire un test sans 'exécuter' vos EJB, remplacez-les temporairement par un simple Thread.sleep(x), vous verrez-bien si votre Gif se déroule ou pas.
    S'il se déroule dans ces conditions, et pas dans les conditions réelles, c'est que c'est bien lié aux travaux sur les EJB.
    Si ça ne fonctionne pas correctement, il reste une solution. Elle concerne le gif lui-même. Un jour j'ai voulu utilisé un gif animé récupéré sur le net, et ce dernier avait un comportement dans mon application (il ne se déroulait pas, mais clignotait ?!) différent de celui qu'il avait dans mon navigateur web où il se déroulait parfaitement.
    J'ai alors entrepris de l'éditer dans mon photoshop, et j'ai remarqué qu'il n'avait pas de période. Le temp définit entre chaque image était nulle ?!
    Je penses que le navigateur dans ce cas ou tout le temps applique lui-même une période, c'est pourquoi il se déroulait correctement dans mon navigateur, mais dans mon application, les images défilaient tellement vite qu'il donnait simplement l'impression de clignoter. J'ai alors ajouté un délai d'1/24ème de secondes entre chaque image, et le gif c'est alors animé correctement dans mon application.
    Avez-vous testé ce gif dans un contexte minimaliste comme vous l'a suggéré adiGuba ?
    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/

  10. #10
    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 riadhhwajdii Voir le message
    voici mon image adiGuba,
    Cette image n'est pas animé !

    a++

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Cette image n'est pas animé !

    a++
    Si si, elle l'est

    Bon ensuite les gifs animés, c'est toujours un poil galère sous java.

    @riadhhwajdii: Vu que tu utilises SwingX, pourquoi ne pas employer le JXBusyLabel: http://developerlife.com/tutorials/?p=248
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  12. #12
    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 sinok Voir le message
    Si si, elle l'est
    Oups ! En effet j'avais téléchargé la miniature génré par le forum

    Citation Envoyé par sinok Voir le message
    Bon ensuite les gifs animés, c'est toujours un poil galère sous java.
    Non ca marche très bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    JLabel label = new JLabel(new ImageIcon(Main.class.getResource("wait.gif")));
    JOptionPane.showMessageDialog(null, label);
    C'est bien animé si le GIF est animé...

    a++

  13. #13
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    686
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 686
    Points : 118
    Points
    118
    Par défaut
    Citation Envoyé par pursang Voir le message
    Avez-vous paramétré une allocation de mémoire spécifique pour lancer votre application ?
    Car en effet, vous semblez avoir pris toutes les précautions pour que cela fonctionne ?!
    Bref, comme vous précisez à la demande d'adiGuba qu'un traitement long est éffectué, pendant lequel vous désirez afficher cette forme de jauge, peut-être qu'un peu plus de mémoire allouée à la machine virtuelle pourrait aider ???
    Pardonnez-moi si je vous lance sur une mauvaise piste, en tout cas, pour ma part, je ne vois rien d'autre.
    En effet, adiGuba a fait le tour, il semblerait clairement que tout est conforme...

    Quoi qu'il en soit, pour savoir si c'est un problème de 'charge', il vous suffit de faire un test sans 'exécuter' vos EJB, remplacez-les temporairement par un simple Thread.sleep(x), vous verrez-bien si votre Gif se déroule ou pas.
    S'il se déroule dans ces conditions, et pas dans les conditions réelles, c'est que c'est bien lié aux travaux sur les EJB.
    Si ça ne fonctionne pas correctement, il reste une solution. Elle concerne le gif lui-même. Un jour j'ai voulu utilisé un gif animé récupéré sur le net, et ce dernier avait un comportement dans mon application (il ne se déroulait pas, mais clignotait ?!) différent de celui qu'il avait dans mon navigateur web où il se déroulait parfaitement.
    J'ai alors entrepris de l'éditer dans mon photoshop, et j'ai remarqué qu'il n'avait pas de période. Le temp définit entre chaque image était nulle ?!
    Je penses que le navigateur dans ce cas ou tout le temps applique lui-même une période, c'est pourquoi il se déroulait correctement dans mon navigateur, mais dans mon application, les images défilaient tellement vite qu'il donnait simplement l'impression de clignoter. J'ai alors ajouté un délai d'1/24ème de secondes entre chaque image, et le gif c'est alors animé correctement dans mon application.
    Avez-vous testé ce gif dans un contexte minimaliste comme vous l'a suggéré adiGuba ?
    désolé pour mon retard,
    J'ai bien essayé de commenter le bloc des EJB mais j'ai toujours une image gif non animé pursang

  14. #14
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    686
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 686
    Points : 118
    Points
    118
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Oups ! En effet j'avais téléchargé la miniature génré par le forum


    Non ca marche très bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    JLabel label = new JLabel(new ImageIcon(Main.class.getResource("wait.gif")));
    JOptionPane.showMessageDialog(null, label);
    C'est bien animé si le GIF est animé...

    a++
    Désolé adiGuba pour mon retard
    En fait j'ai testé comme tois dans une classe et ça a marché .
    Sauf dans mon application j'ai toujours une image non animé
    J'ai essayé plusieurs solutions sans reussir,est ce qu'il ya une autre piste que j'ai oublié de testé? !

  15. #15
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    686
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 686
    Points : 118
    Points
    118
    Par défaut
    Citation Envoyé par sinok Voir le message
    Si si, elle l'est

    Bon ensuite les gifs animés, c'est toujours un poil galère sous java.

    @riadhhwajdii: Vu que tu utilises SwingX, pourquoi ne pas employer le JXBusyLabel: http://developerlife.com/tutorials/?p=248
    Merci sinok,
    Je vais bien essayer ton idée et vous mettre au courant en éspérabt qu'elle fonctionne

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

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut D'accord
    Je ne connaissais pas cette bibliothèque SwingX, du coup, pour moi, JXPanel était une classe de riadhhwajdii qui étend JPanel.
    Donc, dans ce cas, on peut éffectivement mettre en doute la compatibilité entre un composant swingx et un composant swing.
    Encore que, je suis presque sûr que la classe JXPanel étends javax.swing.JPanel, mais ça n'a pas d'importance.
    Bref, vous pouvez aussi tenter l'inverse et utiliser un javax.swing.JPanel au lieu de JXPanel.
    Il est certain, je l'utilise régulièrement dans mes programmes, que les composants swing JPanel et JLabel dans un JFrame jouent correctement un gif Animé...

    Une autre idée :
    Vous avez dit avoir intégré vos travaux EJB dans un SwingWorker. Avez-vous essayé l'inverse ? c.a.d. intégrer le composant qui affiche ce gif animé dans le swingworker au lieu d'y intégrer les traitements EJB...
    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/

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Citation Envoyé par pursang Voir le message

    Une autre idée :
    Vous avez dit avoir intégré vos travaux EJB dans un SwingWorker. Avez-vous essayé l'inverse ? c.a.d. intégrer le composant qui affiche ce gif animé dans le swingworker au lieu d'y intégrer les traitements EJB...
    Très mauvais conseil, cela sortirait le composant de l'EDT, ce qui est à éviter à tout prix...
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

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

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut Ah bon ?
    Désolé de mon ignorance, je ne comprends pas cette phrase :
    cela sortirait le composant de l'EDT
    ???
    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/

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Comme la plupart des API GUI, Swing n'est pas thread safe, donc toutes les opérations sur des composants doivent être réalisées dans le thread de l'interface graphique (dans le cas présent, l'Event Dispatch Thread pour AWT et Swing).

    Pour plus d'informations je te recommande la lecture immédiate de l'article suivant: http://gfx.developpez.com/tutoriel/j...ing-threading/
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

Discussions similaires

  1. [WinDev 11] Problème utilisation image GIF animée
    Par slick42 dans le forum WinDev
    Réponses: 3
    Dernier message: 17/01/2007, 01h03
  2. [VB]Problème affichage image dans IE6
    Par flogreg dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 20/02/2006, 18h41
  3. Problème affichage image dans IE6
    Par flogreg dans le forum IE
    Réponses: 6
    Dernier message: 13/02/2006, 14h29
  4. Affichage images GIF
    Par jackvpt dans le forum Composants VCL
    Réponses: 12
    Dernier message: 06/02/2006, 19h16
  5. problème affichage image
    Par thealpacino dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 30/05/2005, 13h56

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