時間のリストを入力し、それまでの時間、分、秒を表示する簡単なプログラムに取り組んでいます。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); を削除しようとしました。常に更新されるようにしますが、テキストのフラッシュが非常に高速になります。
何か案は?ありがとう。