除了暂停程序一段时间外,“Thread.sleep()”还能做什么吗?

时间:2016-09-02 12:46:32

标签: java multithreading

我创建了一个绘制粗线的程序。

import javax.swing.*;
import java.awt.*;

public class Movement {
    int xGrid = 50;

    public static void main(String[] args) {

        Movement m = new Movement();
        m.animate();
    }

    public void animate() {

        JFrame frame = new JFrame("Movement");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        ScreenDisplay display = new ScreenDisplay();

        frame.getContentPane().add(display);
        frame.setSize(400, 400);
        frame.setVisible(true);

        for (int aL = 0; aL < 200; aL++) {

            xGrid++;

            display.repaint();

            try {

                Thread.sleep(50);
            } catch (Exception ex) { }
        }
    }

    class ScreenDisplay extends JPanel {
        public void paintComponent(Graphics g) {

            g.setColor(Color.RED);
            g.fillOval(xGrid, 175, 50, 50);
        }
    }
}

由于方法“Thread.sleep(50)”,程序的速度减慢了一点。

所以我有点好奇并删除了“sleep()”方法。

我期望输出的是完全相同的输出,只是非常快。

然而,它只是在框架中打印出一个圆圈。

我真的不知道为什么它只输出一个圆圈,我所做的研究都没有提供答案。

任何人都可以解释原因吗?

1 个答案:

答案 0 :(得分:1)

来自Component.repaint文档:

  

重新绘制此组件。         

        如果此组件是轻量级组件,则此方法         导致调用此组件的paint         方法尽快。否则,这种方法会导致         尽快调用此组件的update方法         尽可能。

通过它的外观,你的for循环完成得如此之快,以至于当组件调用repaint方法时,它已经完成,因此只绘制存储在缓冲区中的最后一个圆圈。