pourquoi est-il toujours donner en même temps?
-
27-10-2019 - |
Question
J'ai utilisé le programme suivant pour obtenir le clock.What il est avéré être un horloge statique ? Pourquoi est-il?
import java.util.*;
import java.awt.*;
import javax.swing.*;
class tester {
JFrame fr = new JFrame();
JPanel p = new JPanel();
JLabel l = new JLabel();
Date d = new Date();
GregorianCalendar gc = new GregorianCalendar();
tester() {
p.setBackground(Color.red);
l.setVisible(true);
p.add(l);
fr.add(p);
fr.setSize(200,200);
fr.setVisible(true);
startClockThread();
}
public void startClockThread() {
Runnable r = new Runnable() {
@Override
public void run() {
startClock();
}
};
new Thread(r).start();
}
public void startClock() {
l.setVisible(true);
while(true) {
l.setText(gc.get(gc.HOUR) + ":" + gc.get(gc.MINUTE) + ":" + gc.get(gc.SECOND));
System.out.println(gc.get(gc.SECOND));
}
}
public static void main(String args[]) {
new tester();
}
}
La solution
GregorianCalendar()
par défaut GregorianCalendar Construit en utilisant le heure actuelle dans la zone horaire par défaut avec les paramètres régionaux par défaut.
Vous pouvez le faire de cette façon.
while(true) {
GregorianCalendar gc = new GregorianCalendar();
l.setText(gc.get(gc.HOUR) + ":" + gc.get(gc.MINUTE) + ":" + gc.get(gc.SECOND));
}
Maintenant, vous devez comprendre pourquoi vous obtenez une horloge statique!
Autres conseils
Vous créez seulement GregorianCalendar une fois, et il ne fait jamais mis à jour. Ainsi, la date est toujours le même.
il y a de gros problèmes en dehors de celui que vous avez repéré:
- Ne laissez pas les discussions à l'état sauvage, ils vont geler les ui éventuellement
- chaque accès à un composant Swing doit se produire sur l'EDT
Vous pouvez résoudre à la fois plus facile en utilisant un javax.swing.Timer
ActionListener nextSecond = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// get time ...
timeLabel.setText(...);
}
}
new Timer(1000, nextSecond).start();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow