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 :

Fonction JPanel.repaint() utilise 100% du processeur


Sujet :

AWT/Swing Java

Vue hybride

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

    Informations forums :
    Inscription : Mars 2006
    Messages : 81
    Par défaut Fonction JPanel.repaint() utilise 100% du processeur
    Salut,

    j'ai un problème dans mon application, elle utilise 100% du processeur j'ai mis tout en commentaire au niveau des traitements et je me suis apercu que c'est la fonction repaint(); qui me fait ca.

    Je simplifie mon application :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class Display extends JPanel implements WindowListener, ActionListener{
        public Display() {}
         public void paint(Graphics g) 
         {
                repaint();
         }
          public void finalize()
         {
     
         }
    }
    Je me demandais si quelqu'un a deja eu le même problème, et si pour rafraichir le contenu d'un jpanel il y aurait un autre moyen.

    Merci d'avance

  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
    Pour te pésenter ton erreur:

    La méthode repaint lance une de mande au composant pour se redessiner. Pour se redessiner le composant fait appel à sa méthode paint.

    Or tu redéfinis la méthode paint pour qu'elle appelle repaint qui appelle paint qui appelle repaint qui appelle paint et ainsi de suite....

    Donc vires moi cet appel à repaint manu militari çà ira mieux.


    Sinon pour la redéfinitiond e composants Swing, il vau mieux redéfinir la méthode painComponent que la méthode paint.

    En effet la méthode qui s'occuppe réellement du dessin est paintComponent, la méthode paint elle occupe un autre rôle (plus d'ordonnanceur). Donc il vaut mieux ne pas la redéfinir.

    ++

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2006
    Messages : 81
    Par défaut
    Merci je comprend mieux, je vais voir ca pour la redefinition ^^.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2006
    Messages : 81
    Par défaut
    Ca va mieu car la ca ne le fait plus en boucle, mais lorsque je me déplace dans le contenu du jpanel grâce à un jscrollpane, lutilisation de mon processeur repasse a 100% puis redescend

    les modif apportés :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
     
     
        }

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2006
    Messages : 81
    Par défaut
    Un petit up, dans ce jpanel je fait juste une boucle repété 100 fois environ avec quelque petit calcul pour afficher un carré grâce à la fonction polyline(donc en gros afficher 100 fois un carré). C'est pas à cause de ceci que ca fait travailler le processeur quand même ?

  6. #6
    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
    C'est possible, un JScrollPane déclenche plusieurs repaint.

    Essaie d'externaliser le calcul de ton carré: fais le une fois et une seule - enfin si c'est possible - au lieu de le faire à chaque appel de paintComponent, par exemple au niveau du contructeur de ton JPanel.

    Sinon il te faudra prévoir un thread s'occupant uniquement du calcul du carré, et qui calculera une carré dans son coin, et une fois le calcul fini remplacera le carré actuel par le carré qu'il a calculé

Discussions similaires

  1. Eclipse CDT Completion: Utilisation 100% CPU
    Par XeN-Lo dans le forum Eclipse C & C++
    Réponses: 6
    Dernier message: 04/03/2008, 17h00
  2. Utiliser 100% du processeur
    Par joKED dans le forum Général Dotnet
    Réponses: 4
    Dernier message: 18/04/2007, 01h42
  3. [Maven2] Maven utilise 100% de l'UC
    Par mat360 dans le forum Maven
    Réponses: 1
    Dernier message: 16/03/2007, 10h56
  4. Réponses: 1
    Dernier message: 09/05/2006, 20h01
  5. Utiliser que le processeur
    Par Neilos dans le forum OpenGL
    Réponses: 5
    Dernier message: 31/07/2005, 11h24

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