我正试图解决这个似乎对我不起作用的问题,因为我对此表示不满。似乎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不会进一步更新。
这只是我主应用程序的测试代码,我的主要应用程序非常相似,只是不是更新标签,我应该闪烁光。问题是眨眼通常会过早停止!
谢谢!
答案 0 :(得分:2)
最好使用Calendar#compareTo()
方法比较日历:
while (now.compareTo(later) < 0) {
...
}
在你的情况下,你可以在10:59:59开始你的循环,它会立即退出,因为11:00:00不符合你的条件。
答案 1 :(得分:0)
认为你的循环逻辑是错误的。只要现在的分钟和秒都小于以后的相应值,就会循环。问题是如果分钟不相同,如果现在的秒数超过后面的秒数,则可能需要继续。希望这是有道理的。
所以现在= 12秒40分钟后来= 10秒41分钟
会退出,你不希望它。