无法在 java.swing 中为我的计时器更新分钟和小时的 JLabel

Can't update JLabels of minutes and hours for my chronometer in java.swing

我正在尝试用 java.swing 和秒表制作秒表 我已经尝试过 swing.Timer 和 TimerTask。 你能帮帮我吗?

这是stopwatch.javaclass

    public class Cronometro {
    private int secondi;
    private int minuti;
    private int ore;
    private boolean state=true;
    
    public Cronometro(){
        
    }
    
    public void crono(JLabel s, JLabel m, JLabel h, ActionEvent evt){
        state=true;
        
        Thread t = new Thread(){
            public void run(){
                for(;;){
                    if(state==true){
                       try{
                           sleep(10);
                           secondi++;
                           if(secondi>60){
                               secondi=0;
                               minuti++;
                               
                           }
                           if(minuti>60){
                               secondi=0;
                               minuti=0;
                               ore++;
                           }
                           s.setText(" :"+secondi);
                           m.setText(" : "+minuti);
                           h.setText(""+ore);
                       } catch(Exception e){
                           
                       }
                    }
                    else{
                        break;
                    }
                }
            }
        };
        
        t.start();
    }
    
    public void setState(boolean state){
        this.state=state;
    }
    
}

gui/main.java几乎全部由netbeans生成

这就是您如何使用 Swing Timer 每秒 运行 update

class Cronometro {
    private int secondi;
    private int minuti;
    private int ore;
    private boolean state=true;
    private Timer timer;

    private final JLabel s, m,  h;

    public Cronometro(JLabel s, JLabel m, JLabel h) {
        this.s = s;
        this.m = m;
        this.h = h;
    }

    public void crono(JLabel s, JLabel m, JLabel h){
        state=true;
        if(timer != null) {
            timer.stop();
        }

        timer = new Timer(1000, e->update());
        timer.start();
    }

    public void update(){

        if(! state) return;
        secondi++;
        if(secondi>60){
            secondi=0;
            minuti++;
        }

        if(minuti>60){
            secondi=0;
            minuti=0;
            ore++;
        }
        s.setText(" :"+secondi);
        m.setText(" : "+minuti);
        h.setText(""+ore);
    }

    public void setState(boolean state){
        this.state=state;
    }
}

旁注:为了改进应用程序结构,引入了一个模型 class,它封装了所需的信息(秒、分钟、小时)。在 Cronometro 和 GUI 之间共享此模型。