3 回答
TA贡献1798条经验 获得超3个赞
在事件调度线程上执行代码时,切勿使用Thread.sleep()。
相反,您应该使用Swing计时器来安排动画。
请参阅Swing教程中有关以下内容的部分:
Swing中的并发
如何使用计时器
或者,如果您不想使用Timer,则可以使用SwingWorker(如并发教程中所述),然后在更改图像后只发布()图像。然后,由于SwingWorker不在EDT上执行,因此可以使用Thread.sleep()。
简单的计时器示例:
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
public class TimerTime extends JFrame implements ActionListener
{
JLabel timeLabel;
public TimerTime()
{
timeLabel = new JLabel( new Date().toString() );
getContentPane().add(timeLabel, BorderLayout.NORTH);
}
public void actionPerformed(ActionEvent e)
{
timeLabel.setText( new Date().toString() );
}
public static void main(String[] args)
{
TimerTime frame = new TimerTime();
frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
frame.pack();
frame.setVisible(true);
int time = 1000;
javax.swing.Timer timer = new javax.swing.Timer(time, frame);
timer.setInitialDelay(1);
timer.start();
}
}
添加回答
举报