簡體   English   中英

按鈕中的Java Util計時器

[英]Java Util Timer in a Button

我正在玩棋盤游戲,在游戲的一部分中,我需要像單擊此按鈕一樣,將標簽更改為以1秒的延遲間隔重復計數1到5,然后將標簽更改為“完成”,但問題是先將標簽更改為“完成”,然后再進行計數。

btn.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent arg0) {
            timer = new Timer();
            timer.scheduleAtFixedRate(new TimerTask() {
                // @Override
                public void run() {
                    count++;
                    if (count >= 6) {
                        timer.cancel();
                        timer.purge();
                        return;
                    }
                    lbl.setText(String.valueOf(count));
                }
            }, 1000,1000);
            lbl.setText("done");
        }});

當您單擊按鈕時,按順序執行actionPerformed()方法:

  1. 創建一個新計時器
  2. 注冊一個任務,以便將來每秒定期執行
  3. 將按鈕標簽設置為“完成”

然后,稍后計時器開始工作,並開始增加變量計數,每次按鈕標簽更新一次。 這樣的閱讀應該可以幫助您了解正在發生的事情:計時器是在單獨的線程中執行的。 timer.scheduleAtFixedRate()是一個非阻塞函數,該函數注冊一個TimerTask以便稍后執行並立即返回。

要解決您的問題,類似的方法可能是一種解決方案:

btn.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent arg0) {
            timer = new Timer();
            timer.scheduleAtFixedRate(new TimerTask() {
                // @Override
                public void run() {
                    count++;
                    if (count >= 6) {
                        timer.cancel();
                        timer.purge();

                        // We set the label to done only when the counter
                        // reaches the value 6, after button displayed 5
                        lbl.setText("done");

                        return;
                    }
                    lbl.setText(String.valueOf(count));
                }
            }, 1000,1000);
        }});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM