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

EDT/SwingWorker Java Discussion :

[Thread] Probleme avec mon Timer


Sujet :

EDT/SwingWorker Java

  1. #1
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    33
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 33
    Par d�faut [Thread] Probleme avec mon Timer
    Bonjour a vous,

    Voila mon nouveau probleme. J'ai cree un Timer pour faire un refresh de ma fenetre. Voila le code :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SwingUtilities.invokeLater(
            new Runnable() {
          public void run() {
            new Timer(20000, raffraichir).start();
          }
        }
        );
    Helas meme qd j'ai ma fenetre qui est fermee apres l'avoir ouverte le Timer continue de tourner Et donc je suis bloque.

    Y aurait il pas un moyen de fermer mon Timer au moment de la fermeture de ma fenetre ???

    Merci d'avance


    [Mod�r� par Didier] : ajout de tag dans le titre - Les r�gles du forum Java

  2. #2
    Membre �clair�
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    44
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 44
    Par d�faut
    Bonjour,

    C'est possible en effet, voici pour le principe:

    Tu ajoutes un �couteur � ta fen�tre (WindowListener) et au moment o� ta fen�tre se ferme (windowClosed) tu arretes ton timer.
    Dans ce cas la d�claration anonyme de ton timer n'est pas possible, il te faut une r�f�rence � celui-ci dans ta classe fen�tre.

    Bon courage.

    Ben

  3. #3
    Membre �prouv�
    Inscrit en
    Mai 2002
    Messages
    101
    D�tails du profil
    Informations personnelles :
    �ge : 45

    Informations forums :
    Inscription : Mai 2002
    Messages : 101
    Par d�faut
    Le probl�me avec ta classe anonyme, c'est que tu n'as pas de lien vers ton Timer et donc que tu ne peux pas appeller la methode stop() � la fermeture de la fen�tre...

    Pourquoi ne pas d�clarer ton Timer en dehors de l'appel de m�thode de mani�re � d�finir que ON_WINDOW_CLOSED, tu appelles timer.stop() ? (je sais pas si c'est super clair...)

    Ah ben voil�, benohite m'a devanc� de quelques minutes

  4. #4
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    33
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 33
    Par d�faut
    Merci Ben,

    Mais le probleme c'est que je n'arrive pas a faire Timer.stop(); !!!
    Et je ne vois pas comment faire

    Je suis dans le flou total la

  5. #5
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    33
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 33
    Par d�faut
    Citation Envoy� par Cold Hand
    Le probl�me avec ta classe anonyme, c'est que tu n'as pas de lien vers ton Timer et donc que tu ne peux pas appeller la methode stop() � la fermeture de la fen�tre...

    Pourquoi ne pas d�clarer ton Timer en dehors de l'appel de m�thode de mani�re � d�finir que ON_WINDOW_CLOSED, tu appelles timer.stop() ? (je sais pas si c'est super clair...)

    Ah ben voil�, benohite m'a devanc� de quelques minutes

    voila tout a fait je ne peux me servir de la fonction stop() !!!
    et pour te dire la verite je ne t'ai pas bien suivi
    Tu pourrais reprendre ?

    Merci

  6. #6
    Membre �prouv�
    Inscrit en
    Mai 2002
    Messages
    101
    D�tails du profil
    Informations personnelles :
    �ge : 45

    Informations forums :
    Inscription : Mai 2002
    Messages : 101
    Par d�faut
    Comme �a, � br�le pour point, j'ai une id�e assez simple... Tu cr�es la classe MyTimer qui extends Timer et implements Runnable. Tu impl�mentes run() comme tu l'as fait et ton code devient :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    MyTimer timer = new MyTimer(); 
    SwingUtilities.invokeLater(timer);
    quand tu fermes la fen�tre, tu appelles timer.stop();

  7. #7
    Membre �clair�
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    44
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 44
    Par d�faut
    On appelle d�claration anonyme, le fait de creer un objet sans lui donner de nom (logique non ).
    Dans ton code :Il t'es donc difficile d'appeller la methode stop sur celui-ci vu qu'il n'a pas de nom. Il te faut donc faire quelquechose comme ceci:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Timer t;
    .....
    t = new Timer(20000,rafraichir);
    t.start();
    .....
    .....
    t.stop();
    J'esp�re que c'est un peu plus clair

    Ben

  8. #8
    Membre �prouv�
    Inscrit en
    Mai 2002
    Messages
    101
    D�tails du profil
    Informations personnelles :
    �ge : 45

    Informations forums :
    Inscription : Mai 2002
    Messages : 101
    Par d�faut
    @benohite : Justement, je pense que s'il se complique autant la t�che c'est pour pouvoir passer un Runnable � invokeLater...

  9. #9
    Membre �clair�
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    44
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 44
    Par d�faut
    j'ai peu �tre compris de travers mais pour moi ca ne change rien. Il suffit juste de declarer le timer au lieu de le creer anonymement.

    Ben

  10. #10
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    33
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 33
    Par d�faut
    Citation Envoy� par benohite
    On appelle d�claration anonyme, le fait de creer un objet sans lui donner de nom (logique non ).
    Dans ton code :Il t'es donc difficile d'appeller la methode stop sur celui-ci vu qu'il n'a pas de nom. Il te faut donc faire quelquechose comme ceci:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Timer t;
    .....
    t = new Timer(20000,rafraichir);
    t.start();
    .....
    .....
    t.stop();
    J'esp�re que c'est un peu plus clair

    Ben
    Ben j'ai essaye comme tu me dis mais helas qd j'appele
    sur mon bouton "fermer", j'ai une erreur d'execution et la fenetre ne se ferme plus
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
          at  ........ ligne ou j'ai le t.stop();
    Je ne comprends pas ce probleme

    Merci

  11. #11
    Membre �clair�
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    44
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 44
    Par d�faut
    L� je pense que ca vient de la fa�on dont tu appelles le timer cad la methode SwingUtilities.invokeLater.

    Un petit coup d'oeil dans la doc :
    Causes doRun.run() to be executed asynchronously on the AWT event dispatching thread. This will happen after all pending AWT events have been processed. This method should be used when an application thread needs to update the GUI. In the following example the invokeLater call queues the Runnable object doHelloWorld on the event dispatching thread and then prints a message.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     Runnable doHelloWorld = new Runnable() {
         public void run() {
             System.out.println("Hello World on " + Thread.currentThread());}};
     SwingUtilities.invokeLater(doHelloWorld);
     System.out.println("This might well be displayed before the other message.");
    If invokeLater is called from the event dispatching thread -- for example, from a JButton's ActionListener -- the doRun.run() will still be deferred until all pending events have been processed. Note that if the doRun.run() throws an uncaught exception the event dispatching thread will unwind (not the current thread).
    En r�sum�, ton timer ne sera pas cr�er et d�marrer tant qu'il y aura des �v�nements, ce qui justifie le NullException � mon avis.
    Tu devrais peut �tre essayer de faire plus simple et de te passer de la m�thode invokeLater ou alors tu cr�es d'abord ton timer et tu ne mets dans la methode invokeLater que:Ben

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. probleme avec mon timer
    Par cosmoff dans le forum MPLAB
    R�ponses: 0
    Dernier message: 30/06/2014, 17h52
  2. Probleme avec mon thread
    Par croc14 dans le forum EDT/SwingWorker
    R�ponses: 8
    Dernier message: 23/07/2007, 14h22
  3. problem avec un timer
    Par ridouani dans le forum C++
    R�ponses: 5
    Dernier message: 20/09/2005, 16h43
  4. Probleme avec mon professeur
    Par Hamza dans le forum Algorithmes et structures de donn�es
    R�ponses: 20
    Dernier message: 16/07/2005, 10h50

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