Bạn cần phải cập nhật các văn bản trong một thread riêng biệt mỗi giây.
Lý tưởng nhất là bạn nên cập nhật phần đu duy nhất trong EDT (sự kiện điều phối thread) nhưng, sau khi tôi đã thử nó trên máy tính của tôi, sử dụng Timer.scheduleAtFixRate đã cho tôi kết quả tốt hơn:
java.util.Timer http://img175.imageshack.us/img175/8876/capturadepantalla201006o.png
Các javax.swing. Phiên bản hẹn giờ luôn cách khoảng nửa giây sau:
javax.swing.Timer http://img241.imageshack.us/img241/2599/capturadepantalla201006.png
Tôi thực sự không biết tại sao.
Đây là nguồn đầy đủ:
package clock;
import javax.swing.*;
import java.util.*;
import java.text.SimpleDateFormat;
class Clock {
private final JLabel time = new JLabel();
private final SimpleDateFormat sdf = new SimpleDateFormat("hh:mm");
private int currentSecond;
private Calendar calendar;
public static void main(String [] args) {
JFrame frame = new JFrame();
Clock clock = new Clock();
frame.add(clock.time);
frame.pack();
frame.setVisible(true);
clock.start();
}
private void reset(){
calendar = Calendar.getInstance();
currentSecond = calendar.get(Calendar.SECOND);
}
public void start(){
reset();
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask(){
public void run(){
if(currentSecond == 60) {
reset();
}
time.setText(String.format("%s:%02d", sdf.format(calendar.getTime()), currentSecond));
currentSecond++;
}
}, 0, 1000);
}
}
Đây là nguồn biến đổi sử dụng javax.swing.Timer
public void start(){
reset();
Timer timer = new Timer(1000, new ActionListener(){
public void actionPerformed(ActionEvent e) {
if(currentSecond == 60) {
reset();
}
time.setText(String.format("%s:%02d", sdf.format(calendar.getTime()), currentSecond));
currentSecond++;
}
});
timer.start();
}
Có lẽ tôi nên thay đổi cách chuỗi với ngày được tính, nhưng tôi không nghĩ đó là vấn đề ở đây
Tôi đã đọc, rằng, kể từ Java 5 đề nghị là: ScheduledExecutorService Tôi để lại cho bạn nhiệm vụ để thực hiện nó.
tôi không làm Swing rộng rãi, vì vậy có câu trả lời chi tiết từ mỏ, nhưng Google dường như cung cấp đủ gợi ý: http: // www .google.com/search? q = java + swing + clock Tới điểm: bạn cần cập nhật đồng hồ * chính mình * mọi lúc trong chuỗi nền. – BalusC
@BalusC nhưng bạn làm google rộng rãi;) – Bozho