0

我一直在开发一个简单的程序来输入时间列表并显示在那之前还剩下多少小时、分钟和秒。我遇到了一个延迟问题,即 JFrame 没有与标题同时更新。

图片:http: //i.imgur.com/se08bXm.png

这是我的源代码:

import java.util.*;
import java.awt.*;
import javax.swing.*;
import java.io.*;

public class Schedule extends JFrame {

public String out = "";


public static void main(String[] args) throws FileNotFoundException, InterruptedException {
    new Schedule();
}

public Schedule() throws FileNotFoundException, InterruptedException {

    setSize(300, 60);
    setVisible(true);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    Calendar now = new GregorianCalendar();

    Scanner in = new Scanner(new File("schedule"));

    ArrayList<Calendar> list = new ArrayList<Calendar>();
    ArrayList<String> list2 = new ArrayList<String>();

    while(in.hasNextInt()) {
        Calendar then = new GregorianCalendar();
        then.set(Calendar.HOUR_OF_DAY, in.nextInt());
        then.set(Calendar.MINUTE, in.nextInt());
        then.set(Calendar.SECOND, in.nextInt());
        list.add(then);
        list2.add(in.nextLine());
    }

    while(true) {
        now = new GregorianCalendar();
        int i = 0;
        for (Calendar c : list) {
            if (c.compareTo(now) > 0) {
                out = (difference(now, c) + list2.get(i));
                setTitle(out);
                long t = System.currentTimeMillis();
                while (System.currentTimeMillis() - t < 1000);
                repaint();
                break;
            }
            i++;
        }
    }
}

private String difference(Calendar now, Calendar then) {
    String out = "";
    int seconds = (int) ((then.getTimeInMillis() - now.getTimeInMillis()) / 1000);
    int minutes = seconds / 60;
    seconds %= 60;
    int hours = minutes / 60;
    minutes %= 60;
    return String.format("%02d:%02d:%02d", hours, minutes, seconds);
}

@Override
public void paint(Graphics g) {
    g.setColor(Color.BLUE);
    g.fillRect(0, 0, 300, 60);
    g.setColor(Color.YELLOW);
    g.setFont(new Font("", 0, 32));
    g.drawString(out, 5, 50);
}

}

如何修复我的代码,以便 JFrame 与标题同时更新?我试过删除 while (System.currentTimeMillis() - t < 1); 以便它不断更新,但这只会使文本快速闪烁。

有任何想法吗?谢谢。

4

0 回答 0