我有一个可用的Java程序,我想每隔X秒在显示器上绘制一个对象。做这个的最好方式是什么?我在考虑使用for
循环和一些sleep
语句,但我很好奇是否有更简单或更有效的方法来解决这个问题。
感谢。
答案 0 :(得分:2)
最简单的方法是使用javax.swing.Timer
Timer timer = new Timer(X, new ActionListener() {
public void actionPerformed(ActionEvent evt) {
// Update the variables you need...
repaint();
}
});
timer.setRepeats(true);
timer.setCoalesce(true);
timer.start();
您可能还想阅读
所以你可以理解为什么你不应该在while (true) { Thread.sleep(X) }
(在EDT内)使用Swing
电话
答案 1 :(得分:1)
ScheduledExecutorService可能对此有所帮助。 Javadoc显示了示例用法。完成后不要忘记调用shutdown
方法。
答案 2 :(得分:0)
使用Thread,这将每隔XMilSeconds在屏幕上绘制一个矩形。这将在5次运行后停止。编辑xMilSeconds以进行较慢的运行,并且j> 4在停止之前运行多少次。它确实冻结了,我无法解决。
int i = 0;
private long xMilSeconds = 300;
private boolean paint;
public boolean running = true;
public void paint(Graphics g)
{
super.paint(g);
if(paint)
{
for(;i < i+1;)
{
g.drawRect(i+49,i+49,i+299,i+99);
g.setColor(Color.RED);
g.fillRect(i+49,i+49,i+299,i+99);
}
paint = false;
}
}
public void run()
{
while(running)
{
try
{
Thread.sleep(xSeconds);
paint = true;
repaint();
i++;
j++;
if(j > 4)
{
running = false;
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
}