17

私はJavaに比較的慣れていないので、作業するプロジェクトを選びました。しかし、私はブロックに遭遇しました。1日の特定の時間に実行するメソッドが必要です。私はかなりの検索を行いましたが、それでうまくいくと思われるものは何も見つかりません。Timerクラスに遭遇しましたが、特定の間隔で実行されているようです。スケジューラクラスにも同じ問題があるようです。クォーツにも出くわしましたが、もっと軽量なものが必要だと思いますし、間隔を置いて物事を行う方法しかわかりませんでした。

たぶん、私が新しいという理由だけで、これらのクラスで私を助けることができるいくつかのことを逃しました、しかし私は本当に立ち往生していて、いくつかの助けを使うことができました。

毎日特定の時間に何かを実行するクラス(イベントをキャンセルできることに対するボーナスポイント)を誰かが教えてくれて、クラスを正しく使用する方法を教えてくれたら、それは素晴らしいことです!

TL; DR:プログラムは1日を通して複数回再起動される可能性があるため、間隔ではなく、1日の時間に何かを実行するクラスが必要です。

4

3 に答える 3

30

TimerTaskクラスを試してください

詳細については、 http://oreilly.com/java/archive/quartz.htmlをご覧ください 。

import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class ReportGenerator extends TimerTask {

  public void run() {
    System.out.println("Generating report");
    //TODO generate report
  }

}

class MainApplication {

  public static void main(String[] args) {
    Timer timer = new Timer();
    Calendar date = Calendar.getInstance();
    date.set(
      Calendar.DAY_OF_WEEK,
      Calendar.SUNDAY
    );
    date.set(Calendar.HOUR, 0);
    date.set(Calendar.MINUTE, 0);
    date.set(Calendar.SECOND, 0);
    date.set(Calendar.MILLISECOND, 0);
    // Schedule to run every Sunday in midnight
    timer.schedule(
      new ReportGenerator(),
      date.getTime(),
      1000 * 60 * 60 * 24 * 7
    );
  }//Main method ends
}//MainApplication ends
于 2011-08-06T07:03:50.073 に答える
5

可能であれば、OSのスケジューラを使用してスクリプトまたはJavaアプリケーションを呼び出すことを強くお勧めします。たとえば、*nixの「cron」やWindowsの「タスクスケジューラ」などです。

于 2011-08-06T06:58:01.977 に答える
2

1つの可能性は、必要な精度に応じて、外部スケジューラを使用することです。UNIXではCRONを使用し、WindowsではWindowsスケジューラを使用します。これにより、タイミングと実行がうまく分離されます。

タイマーを使用して、必要な粒度に応じて1分ごとまたは5分ごとに時間をチェックする単純なクラスを作成できます。非常に軽量です。

于 2011-08-06T07:46:22.800 に答える