2017-10-07 9 views
-2

J'ai défini et affiché un temporisateur sur l'interface graphique.Comment diviser un nombre entier en chaîne et le convertir automatiquement par secondes/minutes/heures

Je veux que le programme sauvegarde l'heure et la charge. Je l'ai fait avec succès mais, Je veux quand le programme commence, pour charger le temps passé. Millenecondes est si Millisecondes que si elle passe 1000, il convertit à 1 secondes et obtient la valeur de 0 à nouveau. J'ai créé une seconde (millisecondTimer) en tant que (score) à afficher et ne pas le changer à 0. Le score ne se réinitialise pas lui-même jusqu'à ce que la minuterie s'arrête.

je tiens à saisir le score et extraire avec une commande pour obtenir les valeurs de:

Minutes/secondes/Millisecondes.

J'ai essayé de l'extraire ou le diviser par un nombre différent mais il est trop difficile pour moi:/

Simplement, je veux détecter automatiquement la longueur d'un score et obtenir les minutes, secondes et millisecondes sur un Chaîne et l'afficher après sur JLabel.

Je pourrais créer d'autres entiers comme milliBackup, secondsBackup, minuteBackup. et passez-les séparément en millisecondes/seconde/minute. Mais je veux le faire de cette manière si c'est possible.

public void beginTimer() { 

      score++; 
      ms++; 

      if(ms==1000) { 

       ms = 0; 
       s++; 

       if(s>59) { 

        s = 0; 
        m++; 

        if(m>59) { 

         timer.cancel(); 

        } 
       } 

      } 

      lblTimer.setText(displayTimer()); 

     } 

et DisplayTimer a:

public String displayTimer() { 
      return String.format("%02d:%02d:%03d", m, s, ms); 
     } 
+0

Il est préférable d'utiliser Java DATETIME API'. Jetez un oeil à http://www.oracle.com/technetwork/articles/java/jf14-date-time-2125367.html – Nolequen

Répondre

0

Comment calculer minutes (m), seconde (s) et millisecondes (ms) à partir score:

ms = score; 
s = ms/1000; // integer div 
ms = ms % 1000; // remainder 
m = s/60; // integer div 
s = s % 60; // remainder 
1

Vous ne dites pas comment vous mettre à jour la méthode. Si vous appelez Thread.sleep, des précautions supplémentaires doivent être prises. Il y a de meilleures méthodes. Mais en utilisant votre code:

// bad use of static but once you'll get it working, change it 
static long s = 1; 
static long m = 1; 
static long ms = 1; 

// the method is not beginTimer but updateTimer and goes inside a 
// loop or something which calls it agan and again 
public void updateTimer() { 

     if(ms==1000L) {     
      ms = 0; 
      s++; 

      if(s==60L) {      
       s = 0; 
       m++; 

       if(m==60L) {       
        timer.cancel();       
       } 
      }     
     }    
     lblTimer.setText(displayTimer());    
    } 
+0

J'utilise la minuterie du paquet util.voici la morue: timer = new Timer(); \t \t \t \t \t \t \t \t \t \t TimerTask TimerTask = new TimerTask() { \t \t \t \t \t \t @Override \t \t \t \t \t \t public void run() { \t \t \t \t \t \t \t \t \t \t \t \t \t \t beginTimer(); \t \t \t \t \t \t \t \t \t \t \t \t \t} \t \t \t \t \t \t \t \t \t \t \t}; \t \t \t \t \t \t \t \t \t \t timer.scheduleAtFixedRate (TimerTask, 1, 1); – Erick

+0

Nice. Gardez à l'esprit que 'TimerTask' ne garantit pas l'exécution en temps réel. Par exemple. ne garantira pas qu'il mettra à jour les compteurs sur les millisecondes exactes. Mais il va certainement mettre à jour le bon ** nombre de fois ** à long terme. –

+0

hmm .. Quelle est la meilleure façon d'exécuter la minuterie la plus précise? – Erick