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