2011-07-21 4 views
3

Javaのを使用して特定の時間()でタスクを実行したい。私のコードは動作しますが、うまく見えません。私は2つの文字列を比較しています。私はgetTimeInMills()を使って日付を比較しようとしましたが、数字は同じではありません。ここで特定の日付を待っています。カレンダーJavaコードの最適化

は私のコードです:

import java.util.Calendar; 

class Voter { 
Calendar current,deadline; 
boolean keepGoing = true; 

public static void main(String[] args) { 
    Voter strzal = new Voter(); 
    strzal.shoot(); 
} 

public void shoot() { 
    deadline = Calendar.getInstance(); 
    deadline.set(2011,6,21,11,20,00); 

    while (keepGoing) { 
     // wait 1 second 
     try { 
      Thread.sleep(1000); 
      System.out.print("."); 
     } catch (InterruptedException ex) { ex.printStackTrace(); } 

     current = Calendar.getInstance(); 

     if (deadline.getTime().toString().equals(current.getTime().toString())) { 
      System.out.println("Got it!"); 
      keepGoing = false; 
     } // end of if 
    } // end of while 
} // end of shoot() method 

}

私は締め切りに等しくなるように、現在の時刻が(例では、私は2011年7月21日11に設定を待って、ループ内で実行しています:午前10時)。

コードを改善するにはどうすればよいですか?私は、例えば、compareTo()やgetTimeInMills()メソッドをカレンダークラスから使いたいのですが、期限を正しく設定することはできません。

ありがとうございます。

答えて

3

がより良い提案です、しかし、あなたの知識を

Calendar deadline = Calendar.getInstance(); 
deadline.set(2011,6,21,11,20,00); 
long endTime = deadline.getTime().getTime(); 

// later 
long current = System.currentTimeMillis(); 
if (current >= endTime) { 
    System.out.println("Got it!"); 
    break; 
} 
+0

+1してくれてありがとう – mKorbel

4

眠っている時間を待つのではなく、ScheduledExecutorServiceを使ってこれを管理してください。 scheduleメソッドは、必要なことをするように聞こえます。

2

ホイールを改造しないでください!このためのJDKクラスはScheduledThreadPoolExecutorです。

この例では1時間待っていますが、必要な秒数で置き換えることができます。

ジョブが完了しました。 ScheduledExecutorServiceを使用して

+0

はあなたにピーターをありがとう、あなたのボヘミアンに感謝。 – Khozzy

関連する問題