В настоящее время я делаю некоторые основные графики с таймером в JPanel
, но я не могу понять, почему таймер растет экспоненциально.
Вот мой код:
public class panel extends JPanel implements ActionListener {
int r = 20;
Timer forgo;
public panel(){
setSize(400,400);
}
public void paintComponent(Graphics g){
super.paintComponent(g);
g.drawOval(r, 20, 20, 20);
forgo = new Timer(1000,this);
forgo.start();
}
public void actionPerformed(ActionEvent e) {
r+=5;
repaint();
System.out.println(r);
}
}
так что вы можете видеть, что я пытаюсь сделать овал, идущий на правый край панели, но моя консоль печатает что-то вроде:
25
30
35
40
45
50
55
60
65
70
75
80
85
90
95
100
105
110
115
120
125
130
135
140
145
150
155
через несколько секунд я не могу понять, почему это ускоряется.
Вы создаете таймер в методе paintComponent()
, который генерирует новый таймер каждый раз, когда компонент перекрашивается.
"Ускорение", которое вы видите, - это большое количество таймеров, которые вы создали, вступая в силу одновременно.
Вы можете попытаться создать таймер только один раз, что предотвратит это.
Поскольку @APerson сказал, что причиной является огромное количество Timers
которые появляются каждый раз, когда ваш component
перекрашивается, когда первый раз ваш компонент вызывается системой, он добавляет 1 таймер в память с интервалом времени 1000 мс, после 1000 мс Timer
перекрасит component
что приведет к добавлению нового Timer
в память, теперь второй Timer
также добавит новый Timer
после 1000 мс, когда он repaint
component
и предыдущий, и так далее.