Usar o timer para pausar a execução do programa [duplicado]
Esta pergunta já tem uma resposta aqui:
Repaint não está funcionando corretamente, conforme necessário 1 respostaQuero pausar a execução de um programa Swing por um período especificado. Naturalmente, a primeira coisa que usei foi Thread.sleep (100) (desde que eu sou um noob). Então eu soube que meu programa não é seguro para threads, então decidi usar o Timer com algumas sugestões de colegas programadores. O problema é que não consigo obter fontes de onde posso aprender a atrasar o thread usando o Timer. A maioria deles usa o Timer para atrasar a execução. Por favor, me ajude a resolver esse problema. Forneci um snippet de código compilável abaixo.
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: Meu teste para implementação do Timer (por favor, diga-me se estiver errado):
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();
}
}