簡體   English   中英

如何在java.util.Timer中剩余時間?

[英]How to get time left in a java.util.Timer?

如何獲取util.Timer中剩余的時間? 我想要做的是添加一個進度條,顯示直到計時器重新開始之前剩余的時間。

這是我到目前為止的內容:

int seconds = 8;

java.util.Timer timer = new Timer();
timer.schedule( new TimerTask(){
    public void run(){
        // Do something
        // Add a progressbar that displays time left until the timer "starts over".
    },0,(long) (seconds*1000));

您將需要第二個計時器以特定間隔刷新gui。
實現此目的的另一種方法是每秒激活一個計時器並更新ui中的計數。 如果時間到了,請致電您的具體措施。

一個僅帶有控制台輸出的簡單示例:

TimerTask task = new TimerTask()
{
    int seconds = 8;
    int i = 0;
    @Override
    public void run()
    {
       i++;

       if(i % seconds == 0)
           System.out.println("Timer action!");
       else
           System.out.println("Time left:" + (seconds - (i %seconds)) );
    }
};

Timer timer = new Timer();
timer.schedule(task, 0, 1000);

它的輸出將是:

Time left:7
Time left:6
Time left:5
Time left:4
Time left:3
Time left:2
Time left:1
Timer action!
Time left:7
Time left:6
Time left:5
Time left:4
Time left:3
Time left:2
Time left:1
Timer action!
Time left:7
Time left:6
...

然后只需使用您的代碼更改System.out即可更新進度條。 記住: java.util.Timer啟動自己的Thread Swing並不是線程安全的,因此您需要將每個gui更改代碼放入SwingUtilities.invokeLater()
如果您不執行任何長時間運行的任務,則每次計時器達到8秒標記時,您可能需要直接使用javax.swing.Timer 它使用EDT而不是其自己的Thread ,因此您不需要使用SwingUtilities.invokeLater()同步對Swing組件的調用。

另請參閱:
Swing應用程序內部的javax.swing.Timer與java.util.Timer

您需要做的就是在MainActivity中聲明一個較長的變量timeleft

long timeleft; 

然后,當您創建一個新的Timer時,設置“ onTick”替代以更新每個“ onTick”的timeleft變量(在下面的示例中為1000毫秒)

        timer = new CountDownTimer(time, 1000) {
           @Override
            public void onTick(long millisecondsUntilFinished) {
                timeleft = millisecondsUntilFinished;
            }
          }

每次需要檢查剩余時間時,您的應用程序都可以訪問變量timeleft。

暫無
暫無

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

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