[英]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組件的調用。
您需要做的就是在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.