Chronomètre et System.nanoTime()
Bonjour à toutes et à tous,
Voilà j'essaye de concevoir un chronomètre basé sur la méthode nanoTime(), après un premier essai concluant j'ai voulu implémenter un système de pause et de reprise, et là je suis confronté à de violents StackOverflowError dès que j'essaye de le démarrer. Je pense que j'ai passé trop de temps dessus et j'aurais besoin d'un avis externe pour m'éclairer.
Pour info je fais appel aux méthodes suivantes via un Timer paramétré avec un délai d' une milliseconde.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
|
public class Chrono {
public Chrono() {
}
private final long nsParTick = 100;
private final long nsParMs = 1000000;
private final long nsParSs = 1000000000;
private final long nsParMm = 60000000000L;
private final long nsParHh = 3600000000000L;
private long startMillis = 0;
private long startSeconds = 0;
private long startMinutes = 0;
private long startHours = 0;
private long inter = 0;
private long debut = 0;
private long arreter = 0;
private boolean auTravail = false;
private boolean hasBeenStopped = false;
public boolean getAuTravail()
{
return this.auTravail;
}
public boolean getHasBeenStopped()
{
return this.hasBeenStopped;
}
public void demarrer() {
this.debut = System.nanoTime();
this.startSeconds = debut;
this.startMinutes = debut;
this.startMillis = debut;
this.startHours = debut;
this.auTravail = true;
}
public void arreter() {
this.arreter = System.nanoTime();
this.startSeconds = arreter;
this.startMinutes = arreter;
this.startMillis = arreter;
this.startHours = arreter;
this.inter = arreter - debut;
this.hasBeenStopped = true;
}
public void reinitialiser() {
this.inter = 0;
this.debut = 0;
this.arreter = 0;
this.auTravail = false;
this.hasBeenStopped = false;
}
public void redemarrer()
{
this.auTravail = true;
}
public long getNbTicks() {
long nbTicks;
if (auTravail) {
nbTicks = inter + (System.nanoTime() - debut);
}
else {
nbTicks = (arreter - debut);
}
return nbTicks / nsParTick;
}
public long getNbMilliseconds() {
long nbMillis;
if (auTravail) {
nbMillis = inter + (System.nanoTime() - startMillis);
if (nbMillis < 1000000000)
{
return nbMillis / nsParMs;
}
startMillis = System.nanoTime();
getNbMilliseconds();
}
else {
nbMillis = (arreter - startMillis);
}
return nbMillis / nsParMs;
}
public long getnbSeconds() {
long nbSec;
if (auTravail) {
nbSec = inter + (System.nanoTime() - startSeconds);
if (nbSec < 60000000000L)
{
return nbSec / nsParSs;
}
startSeconds = System.nanoTime();
getnbSeconds();
}
else {
nbSec = (arreter - startSeconds);
}
return nbSec / nsParSs;
}
public long getNbMinutes() {
long nbMin;
if (auTravail) {
nbMin = inter + (System.nanoTime() - startMinutes);
if (nbMin < 3600000000000L)
{
return nbMin / nsParMm;
}
startMinutes = System.nanoTime();
getNbMinutes();
}
else {
nbMin = (arreter - startMinutes);
}
return nbMin / nsParMm;
}
public long getNbHours() {
long nbHours;
if (auTravail) {
nbHours = inter + (System.nanoTime() - startHours);
}
else {
nbHours = (arreter - startHours);
}
return nbHours / nsParHh;
}
} |
Merci d'avance à tous ceux qui pourraient me venir en aide.