Java While循环检查时间但不执行方法

时间:2013-07-17 00:22:18

标签: java swing loops while-loop messagebox

在此代码中,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点时单击按钮,则会显示消息框...

3 个答案:

答案 0 :(得分:1)

而不是while((1 + 1)== 2)来获得无限循环,你可以做:while(true)或for(;;) 如果没有关于你的hrs和mins变量的任何进一步的信息或代码,这个问题是无法回答的

答案 1 :(得分:0)

您需要在循环中更新hrsmins,否则初始化它们,我假设在按下按钮时将始终保持按下按钮的时间。

这就是为什么它在晚上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();
    }
}

希望它有所帮助。