在此代码中,while循环应该检查时间,如果时间等于7 PM,则显示一个消息框。
public void actionPerformed(ActionEvent arg0) {
Enable.setEnabled(false);
Date d = new Date();
int hrs = d.getHours();
int mins = d.getMinutes();
while((1 + 1) == 2) {
if(hrs == 19 && mins == 21) {
JOptionPane.showMessageDialog(frame,
"It's 7:21 PM!",
"Alerts",
JOptionPane.WARNING_MESSAGE);
System.exit(0);
break;
}
}
}
按下按钮将执行该代码。如果您在下午7点之前按下按钮,GUI将冻结(我不在乎),当它转到晚上7点时,它不会显示消息框。如果您在 下午7点时单击按钮,则会显示消息框...
答案 0 :(得分:1)
而不是while((1 + 1)== 2)来获得无限循环,你可以做:while(true)或for(;;) 如果没有关于你的hrs和mins变量的任何进一步的信息或代码,这个问题是无法回答的
答案 1 :(得分:0)
您需要在循环中更新hrs
和mins
,否则初始化它们,我假设在按下按钮时将始终保持按下按钮的时间。
这就是为什么它在晚上7点被推动时起作用的原因,但不会这样做。
所以做这样的事情
while(true) //Equivalent to what you had
{
if(hrs == 19 && mins == 00) {
JOptionPane.showMessageDialog(frame,
"It's 7:00 PM!",
"Time Alert",
JOptionPane.WARNING_MESSAGE);
System.exit(0);
break;
}
//Refresh your hrs and mins here
Calendar calendar = GregorianCalendar.getInstance(); // Probably dont really want to actually get an instance every time
hrs = calendar.get(Calendar.HOUR_OF_DAY);
mins = calendar.get(Calendar.MINUTE);
}
答案 2 :(得分:0)
我在想你正在使用1 + 1 = 2进行连续循环。您可以使用while(true){...}
代替。
此外,while循环对于这种情况不实用。此页面上有一个示例(警报时钟):http://www.ibm.com/developerworks/java/library/j-schedule/index.html
public class AlarmClock {
private final Scheduler scheduler = new Scheduler();
private final SimpleDateFormat dateFormat =
new SimpleDateFormat("dd MMM yyyy HH:mm:ss.SSS");
private final int hourOfDay, minute, second;
public AlarmClock() {
this.hourOfDay = 19;
this.minute = 0;
this.second = 0;
}
public void start() {
scheduler.schedule(new SchedulerTask() {
public void run() {
soundAlarm();
}
private void soundAlarm() {
JOptionPane.showMessageDialog(frame,
"It's 7:00 PM!",
"Time Alert",
JOptionPane.WARNING_MESSAGE);
System.exit(0);
// Start a new thread to sound an alarm...
}
}, new DailyIterator(hourOfDay, minute, second));
}
public static void main(String[] args) {
AlarmClock alarmClock = new AlarmClock();
alarmClock.start();
}
}
希望它有所帮助。