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 :

Utilisation proc 100% - thread & repaint


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Par défaut Utilisation proc 100% - thread & repaint
    Bonjour,

    Je suis entrain de développer une application sous forme d'applet. Pour ca, je l'ai déclaré de cette facon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class monApplet extends JApplet implements Runnable, MouseInputListener, KeyListener {
    Et j'ai donc, vu que j'implemente Runnable, j'ai une fonction run() codée comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public void run() {
      while (true) {
        repaint();
        try {
           Thread.sleep(100);
           // Un certain nombres de traitements mis en commentaire pour ne pas influer sur le test
        } catch (InterruptedException e) {
           e.printStackTrace();
        }
      }
    }
    Le problème, c'est que j'ai un certains nombres de boutons associés à des listeners créés pour l'occasion. Lorsque je clique dessus, l'action se passe normalement (dialogue servlet/applet) et le processeur fait un bon.

    Jusque la, c'est normal, mais le problème, c'est qu'une fois l'action finie (le dialogue client/serveur résolu), l'utilisation proc reste très élevée.
    Au bout d'une trentaine de clics, le proc est à 100% et il ne redescent plus.

    Après recherche dans le code, il apparait que si je commente "repaint" dans la fonction "run", mon applet ne se repeint pas (normal), mais surtout, je peux cliquer autant que je veux, le proc redescent toujours a un niveau proche de 0% aussitot que les actions lancées sont résolues.

    Bref, comment éviter cette "fuite processeur" ?

    Merci d'avance !

  2. #2
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Je présume que c'est pour un jeu ? Si oui, je te conseille de regarder les formes de programmation spécialement prévues pour ça, mais malheureusement je ne peux pas t'aider.

    Sinon, je pense que le problème vient du délai trop court du sleep, je présume que tous les appels au paint s'accumulent ; augmente le jusqu'à ce que ça se stabilise, je présume que ce sera aux alentours de 500 ms.

    Des pointeurs pour les jeux :

  3. #3
    Membre éprouvé
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Par défaut
    Tu présumes bien ;-)

    Par contre, à mon sens, en terme graphique, ce que je veux afficher ne me semble pas insurmontable. J'ai bien quelques images, et pas mal de boutons, mais bon...

    Je vais aller jeter un oeil sur les liens que tu m'as filé. On sais jamais, j'y trouverai peut-être une solution ;-)

  4. #4
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Je n'y connais pas grand chose, mais j'en cause quand même, je pense que c'est aussi la fréquence, pas seulement la lourdeur de la GUI, à laquelle tu fais le rafraichissement qui est pénalisante. As-tu essayé comme je t'ai suggéré de la faire moins fréquemment ?

  5. #5
    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
    Ca me ferait penser à un repaint qui se serait insidieusement introduit dans une des méthodes destinées à réaliser le rendu (genre la méthode paintComponent ou la méthode paint redéfinie et qui fait appel à repaint qui lui même fait appel à paint et ainsi de suite)

Discussions similaires

  1. Proc à 100% à cause du controleur de bus USB.
    Par byloute dans le forum Windows XP
    Réponses: 9
    Dernier message: 02/04/2007, 10h41
  2. Utilisation d'un thread pour faire une pause.
    Par ropabo dans le forum Concurrence et multi-thread
    Réponses: 5
    Dernier message: 11/06/2006, 14h28
  3. utilisation du Multi threading
    Par chti_juanito dans le forum Concurrence et multi-thread
    Réponses: 3
    Dernier message: 30/05/2006, 10h20
  4. [JProgressBar] Utilisation d'un thread
    Par GLDavid dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 16/01/2006, 11h17
  5. [C# 2.0][Form]Comment utiliser les Delegates & Threading
    Par Tips dans le forum Windows Forms
    Réponses: 8
    Dernier message: 08/01/2006, 14h22

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