我正在尝试使用Thread.sleep()方法在循环内部进行延迟。这是我的代码:
new Thread(new Runnable() {
@Override
public void run() {
z=0;
while (z<45){
z++;
handler.post(new Runnable() {
@Override
public void run() {
time.setText(Integer.toString(45-z));
}
});
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
此代码正常运行,突然出现问题。它开始延迟不到一分钟,总计500毫秒,并且总和小于
答案 0 :(得分:1)
相反,如果使用不同的线程,Thread.sleep(),Handler和while循环,你只能尝试使用这样的Handler,
private int timerCount = 0;
private static Handler myHandler = new Handler();
private void runVVRunnable() {
myHandler.postDelayed(runnable, 1000);
}
private Runnable runnable = new Runnable() {
@Override
public void run() {
timerCount++;
if ((time == null)) {
return;
}
if (timerCount <= 45) {
time.setText(Integer.toString(timerCount));
runVVRunnable();
}
}
};
@Override
protected void onDestroy() {
super.onDestroy();
myHandler.removeCallbacks(runnable);
}
你可以调用runVVRunnable()
它将执行与循环
答案 1 :(得分:0)
只是一个猜测但是在睡眠/等待Java线程时你需要尝试捕获 foreach (char name in CharName)
{
Console.WriteLine(name);
}
。
当“某人”在您的主题上调用InterruptedException
时,会抛出此异常。
这将导致线程早于预期从睡眠中唤醒。
检查在线程终止之前是否抓住interrupt()
。