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 :

[paintComponent(Graphics g) + 100 % CPU]


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
    Janvier 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 38
    Par défaut [paintComponent(Graphics g) + 100 % CPU]
    Bonjour,

    j'ai une consommation eccessive de mon cpu (2 dual core + 2 Go ram) sur une application java lorsque je lance l'application et que je fait bouger la souris sur un grap de JFreeChart.

    En fait j'ai surchargé la méthode paintComponent(Graphics g) de ChartPanel
    et j'ai mis une trace dedans et je vois que lorsque je passe la souris sur le graphe sans rien faire le cpu monte.

    Avez vous une idée ?

    Cordialement,

    @+ xarius

  2. #2
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Bonjour,

    serait-il possible d'avoir le code des MouseMotionListeners qui écoutent ton Composant ? Le principe est que le traitement effectué dans les listeners doit être court, notamment parce qu'il peut y avoir beaucoup d'évènements.

    En général, on peut alléger les listeners en lançant un nouveau Thread à chaque évènement (plutôt valable pour les JButtons, où on ne reçoit pas plus d'un évènement à la fois).
    Pour les MouseMotionListeners, où là les évènements arrivent en rafale, une solution est de faire tourner un Thread ou un Timer qui effectue le traitement en boucle. Les listeners ne font que modifier des variables dont le Thread/Timer a besoin pour son traitement. Ainsi, on peut avoir un grand nombre d'évènements (donc de modifications de variables), pour une seule itération du traitement.

    Je suis clair ?
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  3. #3
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 321
    Par défaut
    Citation Envoyé par xarius Voir le message
    Bonjour,

    j'ai une consommation eccessive de mon cpu (2 dual core + 2 Go ram) sur une application java lorsque je lance l'application et que je fait bouger la souris sur un grap de JFreeChart.

    En fait j'ai surchargé la méthode paintComponent(Graphics g) de ChartPanel
    et j'ai mis une trace dedans et je vois que lorsque je passe la souris sur le graphe sans rien faire le cpu monte.

    Avez vous une idée ?

    Cordialement,

    @+ xarius
    Que veux tu dire par "mis une trace" ? tu ecris dans la console avec System.out.println ? Si c'est le cas, le probleme peut venir de là étant donné que ces appels sont couteux. Pour autant ça ne devrait pas faire saturé ton cpu de la sorte. As tu un thread qui appelle par exemple un repaint sur ton composants ? Si oui, es tu sur que le processus en question s'endors quelques millisecondes entre deux appels ?

  4. #4
    Membre confirmé Avatar de Sp4ce
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 81
    Par défaut
    moi ça m'arrivait ce genre de truc si tu mets un repaint dans ton paintComponent... bon ça parait débile de faire ça, mais des fois, par appel successives de méthodes on s'en rend pas compte.

    et ça fait monter ton cpu à fond parce que repaint fait appel à paintComponent qui fait appel à repaint... etc.

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

    Informations forums :
    Inscription : Janvier 2006
    Messages : 38
    Par défaut
    Merci pour vos réponses, mais le problème était ailleur, en fait lorsque je passais la souris sur un graphe cela me redonnait la position de la souris. Ainsi un calcul était fait pour afficher les vraies coordonnées du point. Et c'est ce calcul qui posait probleme.


    Merci.

    @+ xarius

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 05/03/2013, 12h07
  2. Problème SQLservr.exe à 100% CPU
    Par morientes104 dans le forum Administration
    Réponses: 3
    Dernier message: 06/03/2009, 14h10
  3. Eclipse CDT Completion: Utilisation 100% CPU
    Par XeN-Lo dans le forum Eclipse C & C++
    Réponses: 6
    Dernier message: 04/03/2008, 17h00
  4. [Perl-GTK2] `mencoder blabla..` prend 100% CPU empechant GTK d'agir
    Par knoodrake dans le forum Interfaces Graphiques
    Réponses: 10
    Dernier message: 20/02/2008, 09h57
  5. [VC Express] 100% CPU - désactiver intellisense
    Par xterminhate dans le forum VC++ .NET
    Réponses: 4
    Dernier message: 10/07/2006, 10h07

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