1

我有一个可用的 Java 程序,我想每隔 X 秒在显示器上绘制一个对象。做这个的最好方式是什么?我正在考虑使用for循环和一些sleep语句,但我很好奇是否有更简单或更有效的方法来解决这个问题。

谢谢。

4

3 回答 3

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();

您可能还想通读

所以你可以理解为什么你不应该在(EDT内部)使用while (true) { Thread.sleep(X) }调用Swing

于 2012-09-26T00:53:40.187 回答
1

ScheduledExecutorService在这里可能会有所帮助。Javadoc 显示了示例用法。完成后不要忘记调用该shutdown方法。

于 2012-09-26T00:54:46.153 回答
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();
        }
    }
}
于 2012-09-26T00:53:02.850 回答