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 :

Probleme Visionneuse d'images


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 42
    Par défaut Probleme Visionneuse d'images
    Bonjour a tous,

    J'essaye actuellement de réaliser une petite visionneuse d'images en JAVA.

    Elle fonctionne très bien, mais lorsque le nombre d'images est trop élevé ou qu'il y a trop de mise a l'échelle des images, l'application se bloque !

    Il s'agit surement d'un problème de gestion de la mémoire.

    En gros :

    - je récupère une liste des images a afficher (List<String> contenant les chemins vers chacune des images)
    - dans un thread, je crée un imageicon a partir d'un élément de ma liste, et je l'insère dans un JLabel
    - je passe a l'image suivante au bout de x ms

    Pour corriger le problème, j'ai mis des éléments a null et fait des appels manuels au "gc", j'ai aussi essaye le lancement de la VM avec l'option "-Xmx" .... cela ne fait que corriger le problème temporairement !

    Bref je dois m'y prendre d'une mauvaise façon avec mon JLabel et mon ImageIcon dans le cas d'un gros nombre d'images a afficher

    Merci d'avance pour votre aide précieuse

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Il faut que tu charges tes images dans des Threads séparés et non le thread principal (celui de l'interface graphique), car en chargeant une image dans ce thread principal (à savoir l'Event Dispatch Thread) tu bloques les opérations de dessin, d'où une application qui semble figée.

    cf:

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 42
    Par défaut
    Merci pour votre réponse, je vais regarder les liens donnes.

    Juste pour rajouter que lorsque je parle de thread, il s'agit d'un thread que je crée moi même (la classe implémente runnable et c'est dans la méthode run que j'appelle ma méthode "diaporama") => les boutons de l'interface graphique ne sont pas bloques pendant le diaporama, mais a un moment l'ensemble de l'application "crash" !

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Comment crée-tu ton imageicon?
    Que fais tu de ton jlabel après l'avoir créé?
    Que fais-tu de ton imageicon après l'avoir transféré au jlabel?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 42
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Comment crée-tu ton imageicon?
    Que fais tu de ton jlabel après l'avoir créé?
    Que fais-tu de ton imageicon après l'avoir transféré au jlabel?
    boucle : 0 -> mes_images.size()

    String s = mes_images.get(i); // recup du chemin de l'image jpg
    mon_icon = new ImageIcon(s); // creation de l'icon
    mon_label.setIcon(icon); // integration icon ds le label

    Apres x sec d'affichage
    mon_icon = null;
    System.gc();

    .... je retourne en haut de la boucle et passe a l image suivante

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    je crois me souvenir que imageicon garde un cache -> Essaie d'utiliser le constructeur ImageIcon(byte[]) (çà nécessite de lire toi même l'array de byte depuis le système de fichier).

    Aussi, est-ce que ton JLabel est toujours le même ou est-ce que tu crée un nouveau JLabel à chaque fois?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 42
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Aussi, est-ce que ton JLabel est toujours le même ou est-ce que tu crée un nouveau JLabel à chaque fois?
    Le label est toujours le même et est mis a jour avec seticon()

  8. #8
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Essaie ce que je t'ai suggéré, sinon tu risque peut être de devoir passer par un profiler pour trouver ton memory leak. Çà a l'air chiant comme çà, mais çà permet de gagner du temps Et on est parfois surpris de ce que l'on trouve.

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

Discussions similaires

  1. Probleme Inserer une image
    Par Federico_28 dans le forum IHM
    Réponses: 2
    Dernier message: 24/04/2006, 12h05
  2. [bmp]probleme avec les images dont la largeur est >256
    Par delfare dans le forum Développement 2D, 3D et Jeux
    Réponses: 8
    Dernier message: 15/02/2006, 16h59
  3. [ImageMagick] Redimensionnement d'image
    Par GTJuanpablo dans le forum Bibliothèques et frameworks
    Réponses: 11
    Dernier message: 05/01/2006, 14h05
  4. Problème avec l'image initrd
    Par Invité dans le forum Administration système
    Réponses: 1
    Dernier message: 21/12/2005, 16h16
  5. [débutante]Probleme de liens image dans JSP/Servlet
    Par celine31 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 24/11/2004, 15h51

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