Использование таймера для приостановки выполнения программы [дубликат]
На этот вопрос уже есть ответ:
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();
}
}