[英]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.