[英]Simple java timer not working
我是編程新手,使用以下代碼運行計時器。 當使用boolean run = true
調用此方法時,它工作正常,但當boolean run = false
時不會停止。 我該如何解決?
private void countTime(boolean run){
new Thread(){
public void run(){
int mm = 00;
int hh = 00;
while(run){
for (int i=1 ;i<61 ;i++){
try{
int ss = i;
Thread.sleep(1000);
if (ss == 60){
mm += 1;
if (mm == 60){
}
}
if (mm == 60){
hh += 1;
mm = 0;
}
if (ss < 10){
lblClock.setText(Integer.toString(hh) + ":" +
Integer.toString(mm) + ":" + "0"
+ (Integer.toString(ss))
);
} else {
lblClock.setText(Integer.toString(hh) + ":" +
Integer.toString(mm) + ":"
+ (Integer.toString(ss))
);
}
} catch (InterruptedException ex) {
}
}
}
}
}.start();
}
我猜想您正在像countTime(true)
這樣啟動計時器,並且要關閉它,您正在調用countTime(false)
。
您沒有注意到timer
正在作為單獨的線程運行。 因此,再次調用將啟動一個新線程。 基本上,每個調用都會啟動一個新線程,而在以前運行的任何線程中都不會進行任何更新。
這是一個匿名Thread
類,每次您調用countTime(boolean)
方法時,該類都會創建一個新線程。
您可以添加“ 主叫方 ”代碼和代碼段設置為false嗎?
從當前代碼開始, countTime始終會啟動一個新線程。 那可能是原因。 沒有看到在哪里“ 運行 ”設置為假。
是否要始終啟動新線程? 如何以及你在哪里做奔跑為假的?
我認為您只需要一個線程,並且必須從調用方設置運行值“ true ”或“ false ”。 發布呼叫者代碼將有助於解決問題。
編輯:
1)分別聲明一個線程。 為“運行”布爾變量提供setter和getter方法。
2)當用戶單擊開始按鈕,單擊“開始”時,以run為true啟動線程。 如果用戶兩次單擊“開始”,請確保未創建第二個線程。 如果(thread == null)如果線程不為null,則創建新線程並忽略請求
3)當用戶單擊停止按鈕且線程不為null時,將運行設置為false。
通過調用countTime(false)
,您只需啟動另一個線程。如果將時間消息打印到控制台,然后單擊兩次啟動按鈕,您將發現有兩個計時器正在運行。 要停止線程,您可以這樣做:
Thread thread=new Thread(){
public void run(){
//your timer code here
}};
public synchronized void stop(){
if(null != thread){
thread.interrupt();
thread = null;
notifyAll();
}
}
public void start(){
if(null == thread){
thread = new Thread(this);
thread.start();
}
}
當您要啟動線程時,請調用start()
,然后調用stop()
停止它。
當線程處於阻塞狀態時(通過調用Thread.sleep(1000)
),然后調用thread.interrupt()
使其拋出InterruptedException。 我也是編程的新手,並且遇到了類似的問題,希望可以為您提供幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.