Actualisation d'un graph toutes les X sec

Actualisation d'un graph toutes les X sec - Java - Programmation

Marsh Posté le 08-01-2006 à 01:07:03    

Bonjour
 
J'ai fais un applet qui génère un graph à partir de nombres récupérés sur une page web.
Pour ajouter des points sur le graph je dois cliquer sur un bouton "actualiser". J'aimerais faire en sorte que ça s'actualise automatiquement avec un temps définis par un menu déroulant (ex : 1s, 2s, 5s...).
Voici le code source de mon code exécuté lorsque je fais actualiser :

Code :
  1. public void actionPerformed(final ActionEvent e)
  2.     {
  3.         if (e.getActionCommand().equals("UPDATE" ))
  4.         {
  5.          final Millisecond now = new Millisecond();
  6.             System.out.println("Now = " + now.toString());
  7.             System.out.println("URL = " + urlField.getText());
  8.   try
  9.   {
  10.    URL url = new URL(urlField.getText());
  11.    getData(url);
  12.       for (int x=0; x<point.length; x++)
  13.       {
  14.        System.out.println("(debug) Valeur "+(x+1)+" = "+point[x]+"\n" );
  15.       }
  16.   }
  17.   catch (MalformedURLException e1)
  18.   {
  19.    System.out.println("URL non conforme!" );
  20.   }
  21.   catch (IOException e1)
  22.   {
  23.    System.out.println("Erreur!" );
  24.   }
  25.        
  26.             for (int i = 0; i < SUBPLOT_COUNT; i++) {
  27.                 this.lastValue[i] = point[i];
  28.                 this.datasets[i].getSeries(0).add(new Millisecond(), this.lastValue[i]);     
  29.             }
  30.         }
  31.     }


A votre avis comment le pourrais faire pour que lorsque je clique sur le bouton "start" le code s'exécute en boucle tous les X sec et que lorsque je clique sur "stop" il s'arrête :??:
Merci beaucoup pour votre aide :hello:


Message édité par XK le 08-01-2006 à 01:12:50
Reply

Marsh Posté le 08-01-2006 à 01:07:03   

Reply

Marsh Posté le 08-01-2006 à 13:17:01    

faut utiliser un timer (implements Runnable) pour ça
va voir du côté des classes Timer et TimerTask (j'ai déjà utilisé, c'est assez facile)


Message édité par trevor le 08-01-2006 à 13:19:14

---------------
TReVoR - http://dev.arqendra.net - http://info.arqendra.net
Reply

Marsh Posté le 08-01-2006 à 14:50:04    

Merci beaucoup, j'ai fais un thread et ça fonctionne parfairement :)
Un petit lien quand même :
http://java.sun.com/docs/books/tut [...] l/threads/

Reply

Marsh Posté le 08-01-2006 à 15:23:53    

bah un timer se base sur les threads pour faire ces actions (logique puisqu'il faut lancer le timer), donc je ne doute pas que ta solution puisse marcher
disons que tu as du certainement te "taper" le "stop" à la main, j'entends par là, ne pas utiliser la méthode stop() de la classe Thread, et gérer l'arrêt du thread avec test sur un attribut


---------------
TReVoR - http://dev.arqendra.net - http://info.arqendra.net
Reply

Marsh Posté le 08-01-2006 à 18:12:38    

En gros voilà comment j'ai fais :

Code :
  1. public void actionPerformed(final ActionEvent e)
  2.     {
  3.         if (e.getActionCommand().equals("START" ))
  4.         {
  5.          traceChart = new Thread(this);
  6.          traceChart.start();
  7.         }
  8.         if (e.getActionCommand().equals("STOP" ))
  9.         {
  10.          traceChart = null;
  11.         }
  12.     }


Donc avec les boutons START et STOP on démarre/arrête le thread "traceChart".

Code :
  1. public void run() {
  2.         Thread me = Thread.currentThread();
  3.         while (traceChart == me) {
  4.             try {
  5.                 Thread.currentThread().sleep(/*Valeur fréquence update*/);
  6.             } catch (InterruptedException e) {
  7.             }
  8.             updateChart();
  9.         }
  10.     }


Avec ce code je mets le thread en pause pendant la valeur déterminée par le slider, donc le thread s'éxécute toutes les X ms. :)

Reply

Marsh Posté le 08-01-2006 à 19:09:35    

le traceChart est un peu violent je trouve, je serai plutot passé par une méthode de ta classe traceChart du genre

Code :
  1. pubic void stop() {
  2.   this.actif = false;
  3. }


 
avec comme modif de run()

Code :
  1. ...
  2.   while (this.actif) {
  3.   ...


 
et du coup un

Code :
  1. traceChart.stop()

à la place du

Code :
  1. = null


---------------
TReVoR - http://dev.arqendra.net - http://info.arqendra.net
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed