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

Langage Java Discussion :

Pause pendant le programme


Sujet :

Langage Java

Vue hybride

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 34
    Par défaut Pause pendant le programme
    Bonjour à tous,

    je cherche à faire une pause (une demi-seconde par exemple) pendant mon programme java, mais la méthode que j'utilise (Thread.sleep) me pose problème.

    Je m'explique : mon code est le suivant :

    ... //calculs

    g.repaint // je mets à jour la fenêtre de dessin


    // Pour faire la pause d'une demi-seconde

    try {
    Thread.sleep(500);
    }
    catch (InterruptedException e) { e.printStackTrace();
    }


    ... // calculs

    g.repaint // pour remettre à jour la fenêtre de dessin.


    Le problème est qu'en faisant comme ca, il ne fait pas le premier repaint (il fait de suite la pause après les premiers calculs),
    il fait bien la pause d'une demi-seconde, et seulement après un fait un repaint (en faisant les deux mises à jour en une seule fois).


    Pourriez vous m'expliquer pourquoi il fait cela, et comment y remédier svp ?


    Merci d'avance

  2. #2
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 052
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 052
    Par défaut
    Salut,

    j'ai pas bien saisi ton explication, mais je pense que cela ne se fait pas dans le même fil d'exécution.

    Un repaint() est une méthode Thread-safe, elle s'exécute dans l'EDT. Lorsque tu fait un Thread.sleep(int), cela se fait dans le thread courant (enfin, d'après ce que tu indique).

    Je pense que tu veux faire une pause entre les 2 repaint();

    Peut-être en mettant ton sleep dans l'EDT...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 34
    Par défaut
    Pas tout compris là ^^

    Je vais essayer d'être plus clair sur mon problème,

    en fait je fais un repaint, un Thread.sleep, puis des calculs et un nouveau repaint,

    et à l'exécution, il ne me fait pas le premier repaint, il me fait la pause puis le deuxième repaint.



    Qu'est ce que l'EDT ?

  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
    EDT = Event Dispatching Thread.

    Pour ce genre de choses, il ne faut pas employer sleep, mais wait. Le wait libère le scheduler, et le EDT, donc, peut s'exécuter et faire le premier repaint.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 34
    Par défaut
    Ok merci,

    mais peux tu m'expliquer comment l'utiliser stp ?

    Je n'ai pas réussi...

  6. #6
    Membre chevronné
    Profil pro
    Développeur Java
    Inscrit en
    Novembre 2007
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2007
    Messages : 301
    Par défaut
    Comme solution, tu peux utiliser ces deux méthodes de SwingUtilities :
    invokeAndWait(Runnable doRun)
    invokeLater(Runnable doRun)

    La première solution serait de mettre le premier repaint dans un Thread et utiliser un invokeLater. Et ensuite faire un Thread.sleep() comme tu l'as fait.

    La deuxième solution serait de mettre le sleep() et le deuxième repaint dans un Thread avec un invokeAndWait.

Discussions similaires

  1. Mettre une pause dans un programme
    Par PNL dans le forum Général Java
    Réponses: 12
    Dernier message: 28/01/2016, 01h54
  2. [Débutant] Pause dans un programme en mode console ?
    Par pugnator dans le forum Langage
    Réponses: 2
    Dernier message: 15/12/2006, 13h08
  3. [C#]Comment eviter Exception pendant que programme en pause?
    Par Revan012 dans le forum Windows Forms
    Réponses: 11
    Dernier message: 11/03/2006, 04h05
  4. Pause dans un programme Pro*C
    Par Veve44 dans le forum C
    Réponses: 5
    Dernier message: 11/10/2005, 18h49
  5. Faire une pause dans le programme
    Par shinobi dans le forum Access
    Réponses: 6
    Dernier message: 13/06/2005, 17h37

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