2013-07-17 66 views
0

在此代码while循环应该检查的时间,并且如果该时间等于下午7时,则显示一个消息框。爪哇While循环检查的时间,但不执行方法

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

你在哪里把数值放入变量“hrs”和“mins”中?当程序进入while循环时,它们将保留它们拥有的任何值,并且永远不会更新。 –

+0

也是按下按钮,你推门,如果小时从来没有19那么它不会改变,直到你在另一个线程运行 – nachokk

+1

当你期待1 + 1不等于2? (我意识到你正在尝试循环,直到休息,这是一个可怕的方式来做到这一点。) – roippi

回答

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); 
} 
1

而不是做的,而((1 + 1)== 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(); 
    } 
} 

希望它有帮助。