Использование таймера для приостановки выполнения программы [дубликат]

На этот вопрос уже есть ответ:

Repaint не работает должным образом 1 ответ

Я хочу приостановить выполнение программы Swing на указанное время. Естественно, первое, что я использовал, был Thread.sleep (100) (так как я нуб). Затем я узнал, что моя программа не является поточно-ориентированной, поэтому я решил использовать Timer с некоторыми советами других программистов. Проблема в том, что я не могу получить какие-либо источники, где я могу узнать, как задержать поток, используя Таймер. Большинство из них используют таймер для отсрочки исполнения. Пожалуйста, помогите мне решить эту проблему. Я предоставил ниже скомпилированный фрагмент кода.

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

public class MatrixBoard_swing extends JFrame{

    public static void main(String[] args){
        SwingUtilities.invokeLater(new Runnable() {
          public void run() {
            MatrixBoard_swing b = new MatrixBoard_swing();      
          }
       });
    }

    MatrixBoard_swing(){
        this.setSize(640, 480);
        this.setVisible(true);
        while(rad < 200){
            repaint();
            rad++;
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }
    }

    int rad = 10;

    public void paint(Graphics g){
        super.paint(g);
        g.drawOval(400-rad, 400-rad, rad, rad); 
    }

}

EDIT: моя пробная версия для реализации Timer (пожалуйста, скажите мне, если это не так):

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class MatrixBoard_swing extends JFrame implements ActionListener{

    Timer timer;

    public static void main(String[] args){
        SwingUtilities.invokeLater(new Runnable() {
          public void run() {
            MatrixBoard_swing b = new MatrixBoard_swing();      
          }
       });
    }

    MatrixBoard_swing(){
        this.setSize(640, 480);
        this.setVisible(true);
        timer = new Timer(100, this);
        timer.start();
    }

    int rad = 10;

    public void paint(Graphics g){
        super.paint(g);
        g.drawOval(400-rad, 400-rad, rad, rad); 
    }

    @Override
    public void actionPerformed(ActionEvent arg0) {
        repaint();
        rad++;
        if(rad >= 200){
            timer.stop();
        }
    }

Ответы на вопрос(1)

Ваш ответ на вопрос