L'application Chronometre est bâti à partir de la
classe Chronometre .java.
Elle crée un fichier nommé
temps.txt dans le répertoire Course se trouvant dans le
répertoire d'exécution de l'application.
Le fichier comporte une valeur par ligne. Chaque valeur est
décimale.
Il se compose:
De l'heure de démarrage du chronomètre stockée sous la forme d'un entier long (64 bits) exprimant le nombre de millisecondes depuis le 1/1/1970.
D'un ensemble, éventuellement vide, de lignes
comportant un couple (temps/dossard) correspondant au
passage d'arrivé d'un coureur.
temps: exprime le
nombre de millisecondes entre le départ du chronomètre
et l'arrivée du coureur.
dossard: indique le numéro
de dossard du coureur. La valeur -1 signifie que l'on a pas
le numéro de dossard de ce coureur. Les valeurs -1000000-X
indiquent que ce couple est invalide et le coureur avait le dossard
numéro X.
Exemple: le fichier ci-dessus a été créé en 2003, le premier coureur est arrivé en 33037 millisecondes et porte le dossard 65. Le deuxième temps est invalide et avait été affecté au coureur ayant le dossard numéro 2. Le troisième temps est valide mais on a pas le numéro de dossard du coureur.
1060771483894
33037
65
34117
-1000002
38117
-1
Outre les membres gérant l'interface graphique, cette classe comporte:
boolean m_chronometreDemarre
Booléen
indiquant si le chronomètre a été démarré.
long m_heureDemarrage
Heure
de démarrage du chronomètre: en secondes depuis le
1/1/1970
DefaultListModel m_listeTemps
Liste
d'objet de la classe Temps.java
long m_nbTemps
Nombre
d'éléments dans la liste m_listeTemps.
boolean m_sauvegardeDemandee
La
sauvegarde du fichier de temps est demandée car un élément
a été validé ou invalidé.
void
chronoMetre(...)
Cette méthode est appelé chaque
fois que le bouton est pressé.
- Si le chronomètre
n'est pas démarré, m_chronometreDemarre devient vrai,
on stocke l'heure courante dans m_heureDemarrage et on ajoute un
nouvel élément dans m_listeTemps.
- Si le
chronomètre est démarré, on crée un
nouveau temps (instance de la classe Temps) ayant pour valeur: la
différence entre le temps courant et le temps de démarrage
du chronomètre ainsi que la valeur du dossard ayant été
saisie (s'il y en a une).
Enfin, elle sélectionne ce nouvel
élément dans la liste défilant de la fenêtre.
void
run()
Cette méthode est s'exécute en boucle
toute les 500 millisecondes dans une thread indépendante.
Si
le chronomètre est démarré, elle affiche la
différence entre l'heure courante et l'heure de départ
du chronomètre.
Si le nombre d'enregistrement de temps du
fichier temps.txt est différent du nombre stocké dans
m_listeTemps, on enregistre le fichier en appelant
ecritFichier().
Elle appelle également ecritFichier() si
m_sauvegardeDemandee est vraie.
void
litFichier()
Cette méthode est appelée au
démarrage de l'application.
Elle lit le fichier temps.txt
du répertoire Course.
Si ce fichier n'existe pas, la
méthode se termine.
Si ce fichier existe, elle demande à
utilisateur s'il désire continuer ce fichier:
- Si
l'utilisateur ne veut pas continuer le fichier, il est détruit.
- Si l'utilisateur continue le fichier, on lit l'heure de départ
que l'on stocke dans m_heureDemarrage, puis on lit les
enregistrements (temps/dossard) que l'on stocke dans m_listeTemps.
void
ecritFichier()
Cette méthode est appelée
régulièrement par la méthode run().
Elle
renomme le fichier temps.txt en temps.txt.sav.
Elle crée un
nouveau fichier temps.txt à partir des informations des
membres m_heureDemarrage et m_listeTemps.
void
chronoMetreSaisie(...)
Cette méthode est appelée
par l'interface graphique. Elle gère la saisie du numéro
de dossard.
void
afficheMenuListe()
Cette méthode est appelée
lorsqu'un clic se produit sur la liste des temps. Elle affiche un
menu permettant de valider ou d'invalider une ligne.