salve a tutti!
mi hanno chiesto di fare un piccolo programma per nokia in java, solo che ho riscontrato un problema.
la base è un semplice cronografo che, dato un tempo (tipo 15 minuti e 27 secondi, quindi espresso in 00:15:27:000) cominci un conto alla rovescia e, arrivati agli ultimi 10 secondi, li scandisca con un tono (allo scadere del tempo il suono è più acuto e lungo).
la parte acustica l'ho fatta ed anche la parte del cronografo solo che, in quest'ultima, ho riscontrato un problema di "tempistica".
mi spiego meglio.
facendo delle prove con l'emulatore del wtk ho notato che i secondi scanditi non sono perfettamente a tempo con l'orologio vero e proprio, non che dopo sfasi con l'ora, ma semplicemente non sono regolari.
per segnare i secondi ho usato il System.currentTimeMillis(), ma ho visto che prima di ricaricare il tempo trascorso, passano 230 millisecondi (uno in più o uno in meno).
per farvi capire meglio vi posto la parte del codice in questione.
P.S.: i toni li ho trattati con i thread
P.P.S.: non badate alla cascata di if, è ancora in versione di prova
FormatoOra restituisce la differenza tra l'ora in cui si esegue lo start del cronografo e il tempo nell'istante "oraPrima", in formato "hh:mm:ss:SSS" il tutto sottratto al tempo iniziale, ovvero i 15minuti e 27 secondi, mentre txt.setString(ris) setta la textBox con il risultato di FormatoOra.Codice PHP:public void run()
{
oraPrima = System.currentTimeMillis();
String ris = FormatoOra(oraPrima, now, tempoDisp);
txt.setString(ris);
int ore = Integer.parseInt(ris.substring(0,2));
int min = Integer.parseInt(ris.substring(3,5));
int sec = Integer.parseInt(ris.substring(6,8));
int mil = Integer.parseInt(ris.substring(9,10));
ThreadSuona ts = new ThreadSuona();
ThreadSuonaFine tsf = new ThreadSuonaFine();
if (ore == 0 && min == 0 && sec == 9 && !secondi[9])
{ ts.start(); secondi[9] = true;}
else if (ore == 0 && min == 0 && sec == 8 && !secondi[8])
{ ts.start(); secondi[8] = true;}
else if (ore == 0 && min == 0 && sec == 7 && !secondi[7])
{ ts.start(); secondi[7] = true;}
else if (ore == 0 && min == 0 && sec == 6 && !secondi[6])
{ ts.start(); secondi[6] = true;}
else if (ore == 0 && min == 0 && sec == 5 && !secondi[5])
{ ts.start(); secondi[5] = true;}
else if (ore == 0 && min == 0 && sec == 4 && !secondi[4])
{ ts.start(); secondi[4] = true;}
else if (ore == 0 && min == 0 && sec == 3 && !secondi[3])
{ ts.start(); secondi[3] = true;}
else if (ore == 0 && min == 0 && sec == 2 && !secondi[2])
{ ts.start(); secondi[2] = true;}
else if (ore == 0 && min == 0 && sec == 1 && !secondi[1])
{ ts.start(); secondi[1] = true;}
else if (ore == 0 && min == 0 && sec == 0 && !secondi[0])
{ tsf.start(); secondi[0] = true;}
}
qualcuno ha una soluzione?
personalmente pensavo di trattare ore, minuti e secondi con il gregorian calendar, mentre i decimi/centesimi/millesimi con il currentTimeMillis... voi??
spero di essermi spiegato in maniera decente...!!


Rispondi quotando