1

我正在尝试解决这个似乎对我不起作用的问题,因为我对此感到头疼。似乎while循环没有正确循环。

假设我单击一个按钮,这是我的代码:

Calendar now = Calendar.getInstance();
Calendar later = Calendar.getInstance();

later.add(Calendar.SECOND, 120);

Label1.setText(String.valueOf(later.get(Calendar.MINUTE)));
Label2.setText(String.valueOf(later.get(Calendar.SECOND)));

while ((now.get(Calendar.MINUTE) <= later.get(Calendar.MINUTE)) && (now.get(Calendar.SECOND) <= later.get(Calendar.SECOND))){

    Label3.setText(String.valueOf(now.get(Calendar.SECOND)));
    Label4.setText(String.valueOf(now.get(Calendar.MINUTE)));



//try {

//Thread.sleep(500);

//} catch (InterruptedException e1) {

//// TODO Auto-generated catch block

//e1.printStackTrace();

//}

    now = Calendar.getInstance();

}

我尝试了 WITH 和 WITHOUT Thread.sleep(500)。

WITH = 全部 4 个标签更新,但应用程序变得无响应。WITHOUT = 全部 4 个标签更新,Label1 正确显示它提前 2 分钟。但是 while 循环就停在那里,Label3 和 Label4 没有进一步更新。

这只是我的主应用程序的测试代码,我的主应用程序非常相似,只是不是更新标签,而是应该闪烁灯。问题是闪烁通常会过早停止!

谢谢!

4

2 回答 2

2

最好使用Calendar#compareTo()以下方法比较日历:

while (now.compareTo(later) < 0) {
    ...
}

在您的情况下,您可以在 10:59:59 开始循环,它会立即退出,因为 11:00:00 不满足您的条件。

于 2013-05-15T16:54:37.033 回答
0

认为你的循环逻辑是错误的。只要现在的分钟和秒都小于以后的相应值,您就可以循环。问题是,如果分钟不同,如果现在的秒数多于后来的秒数,您可能希望继续。希望这是有道理的。

所以现在 = 12 秒 40 分钟及以后 = 10 秒 41 分钟

会退出,你不希望它。

于 2013-05-15T16:53:39.193 回答