定时器启动后可切换按钮不起作用

我正在尝试制作一个可切换的按钮来启动和停止倒数计时器。它会启动计时器但不会停止。我有点像 java 和 swing 之类的初学者,有人能帮忙吗?这是一些代码:


private static Timer timer;

timer = new Timer(1000, new ActionListener() {

    @Override

    public void actionPerformed(ActionEvent e) {

        l1.setText(Integer.toString(timeLeft / 60) + ":" + Integer.toString(timeLeft % 60));

        timeLeft--;

        if (timeLeft == 0) {

            boolean rest = false;

            if (rest) {

                timeLeft = workTime;

                JOptionPane.showMessageDialog(null, "Times Up!");

                rest = false;

            } else {

                timeLeft = restTime;

                JOptionPane.showMessageDialog(null, "Times Up!");

                rest = true;

            }

        }

    }

});

b1.addActionListener(new ActionListener() {

    public void actionPerformed(ActionEvent evt) {

        boolean start = true;

        if (start == true){

            timer.start();

            b1.setText("stop");

            start = false;

        } else if (start == false){

            timer.stop(); //the part that doesn't work

            b1.setText("start");

            start = true;

        }

    }

});

这不是确切的代码,而是重要的部分


阿晨1998
浏览 109回答 1
1回答

弑天下

因为在 b1.addActionListener 上你设置了 boolean start = true; 这意味着每当你回到你的 actionPerformed 监听器时,start = true你总是需要在 actionPerformed 之外声明和初始化。b1.addActionListener(new ActionListener() {    public void actionPerformed(ActionEvent evt) {        boolean start = true;        if (start == true){            timer.start();            b1.setText("stop");            start = false;        } else if (start == false){            timer.stop(); //the part that doesn't work            b1.setText("start");            start = true;        }    }});建议:您还可以声明您的boolean start;类后并在默认构造函数中初始化start=true;,您可以在代码中使用 start 变量。或者简单的 例子private static Timer timer;boolean start = true;boolean rest = false;timer = new Timer(1000, new ActionListener() {    @Override    public void actionPerformed(ActionEvent e) {        l1.setText(Integer.toString(timeLeft / 60) + ":" + Integer.toString(timeLeft % 60));        timeLeft--;        if (timeLeft == 0) {            if (rest) {                timeLeft = workTime;                JOptionPane.showMessageDialog(null, "Times Up!");                rest = false;            } else {                timeLeft = restTime;                JOptionPane.showMessageDialog(null, "Times Up!");                rest = true;            }        }    }});b1.addActionListener(new ActionListener() {    public void actionPerformed(ActionEvent evt) {        if (start == true){            timer.start();            b1.setText("stop");            start = false;        } else if (start == false){            timer.stop(); //the part that doesn't work            b1.setText("start");            start = true;        }    }});
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java