很抱歉发布了另一个关于Java swing和循环的帖子.我已经读完了其他人,但没有一个解决方案真的适合我.好的,现在就解决问题吧.我有一个扩展JFrame的类,其中我有一个运行秒表的Timer,如下所示:
class StopWatch extends TimerTask{
public void run() {
time.setText(String.format("%02d:%02d", minutes_elapsed,seconds_elapsed));
seconds_elapsed++;
if(seconds_elapsed == 60){
seconds_elapsed = 0;
minutes_elapsed++;
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我的标签"时间"更新的唯一方法是当我调用time.update(time.getGraphics())时,但这比前一次更新.任何想法我应该做什么?我也尝试过重绘,验证和绘画.对我来说,油漆做同样的事情,更新确实...任何想法?PS我不知道它是否重要但我在public void start_timer()函数中创建了Timer,如下所示:
public void start_timer(int minutes, int seconds){
if(timer == null)
timer = new Timer();
timer.scheduleAtFixedRate(new StopWatch(),0,1000);
}
Run Code Online (Sandbox Code Playgroud)
我怀疑你用的是一个java.util.Timer而不是一个javax.swing.Timer.后者将确保计时器在UI线程上运行,我怀疑这是问题所在.
有关它们的教程,请参阅"如何使用Swing Timers".您将要转换TimerTask为ActionListener`,然后使用
timer.setDelay(1000);
timer.setRepeats(true);
timer.start();
Run Code Online (Sandbox Code Playgroud)