2013-07-17 103 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(); 
    } 
} 

希望它有幫助。