while循环与Calendar交互

时间:2013-05-15 16:42:06

标签: java

我正试图解决这个似乎对我不起作用的问题,因为我对此表示不满。似乎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不会进一步更新。

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

谢谢!

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

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

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

会退出,你不希望它。