Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 执行了两次Swing计时器调用操作_Java_Swing_Timer_Jlabel - Fatal编程技术网

Java 执行了两次Swing计时器调用操作

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

我有一个扩展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 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。否则,根据你的说法,我会得到一个我没有得到的错误。但无论如何,谢谢。