Java 执行了两次Swing计时器调用操作
我有一个扩展JLabel的类。我希望每秒钟将JLabel中的文本值增加1。我用了摇摆计时器。但它是递增的2而不是1。我的猜测是,它要求执行两次操作,而不是一次Java 执行了两次Swing计时器调用操作,java,swing,timer,jlabel,Java,Swing,Timer,Jlabel,我有一个扩展JLabel的类。我希望每秒钟将JLabel中的文本值增加1。我用了摇摆计时器。但它是递增的2而不是1。我的猜测是,它要求执行两次操作,而不是一次 public class MineTimer extends JLabel{ private Timer timer; int time = 0; public void start() { time = 0; timer = new Timer(1000, new ActionL
public class MineTimer extends JLabel{
private Timer timer;
int time = 0;
public void start() {
time = 0;
timer = new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
setText("" + time++);
}
});
timer.start();
}
}
预期输出:
1秒后的JLabel文本
1
2
3
2
4
6
JLabel文本2秒后
1
2
3
2
4
6
JLabel文本3秒后
1
2
3
2
4
6
实际输出:
1秒后的JLabel文本
1
2
3
2
4
6
JLabel文本2秒后
1
2
3
2
4
6
JLabel文本3秒后
1
2
3
2
4
6
也许你在别的地方调用timer.start()?当您这样重写代码时,代码的行为如何
public class MineTimer extends JLabel {
public void start() {
new Timer(1000, new ActionListener() {
int time = 0;
@Override
public void actionPerformed(ActionEvent e) {
setText("" + time++);
}
}).start();
}
}
也许你在别的地方调用timer.start()?当您这样重写代码时,代码的行为如何
public class MineTimer extends JLabel {
public void start() {
new Timer(1000, new ActionListener() {
int time = 0;
@Override
public void actionPerformed(ActionEvent e) {
setText("" + time++);
}
}).start();
}
}
我只是以这种方式修改了代码,以100%确保您不会在其他地方调用timer.start()。如果你这样做了,那么在我重写之后,你应该得到一个编译器错误。如果“start”实际上被调用了两次,那么每个计时器都会增加相同的变量,导致可见的增量为2-在我的解决方案中,计时器只有自己的变量,从其他任何地方都无法访问,从而阻止了这种行为。这只是一个猜测,我必须像以前一样看过你的全部代码,才能知道到底出了什么问题。我没有在其他地方调用start。否则,根据你的说法,我会得到一个我没有得到的错误。但无论如何,谢谢。我只是以这种方式修改了代码,以100%确保您不会在其他地方调用timer.start()。如果你这样做了,那么在我重写之后,你应该得到一个编译器错误。如果“start”实际上被调用了两次,那么每个计时器都会增加相同的变量,导致可见的增量为2-在我的解决方案中,计时器只有自己的变量,从其他任何地方都无法访问,从而阻止了这种行为。这只是一个猜测,我必须像以前一样看过你的全部代码,才能知道到底出了什么问题。我没有在其他地方调用start。否则,根据你的说法,我会得到一个我没有得到的错误。但无论如何,谢谢。