0

在这段代码中,一个 while 循环应该检查时间,如果时间等于晚上 7 点,则显示一个消息框。

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 点时单击该按钮,则会显示消息框...

4

3 回答 3

1

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

于 2013-07-17T00:32:22.777 回答
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);
}
于 2013-07-17T00:39:28.353 回答
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();
    }
}

希望能帮助到你。

于 2013-07-17T02:15:18.177 回答