質問

たいと思っていますjava.utils.タイマーとresettable時間java.またオフイベント発生がX秒です。場合は何も起こらなくなる時間にタイマーを作成しX秒、そのイベントが発生するとしています。

しかし、X秒が経過すると、どうしたらよろしいですかの事故が発生した後Y秒ではなく、その思いを伝えることができるように、タイマーをリセット、そのような色合いとなり、次のように、イベントが発生するY秒です。E.g.タイマーの動きを次のように:

Timer timer = new Timer();  
timer.schedule(timerTask, 5000); //Timer starts in 5000 ms (X)

//At some point between 0 and 5000 ms...  
setNewTime(timer, 8000);  //timerTask will fire in 8000ms from NOW (Y).

きというものはないと思いないというこのダイマーは、お問い合わせいただいた場合の解除()ができな日程を設定することができます。

みっく近い複製はこの動作は、javax.swing.タイマーを停止origionalタイマーを新規作成します。すなわち:

timer.stop();
timer = new Timer(8000, ActionListener);
timer.start();

はあります。?

役に立ちましたか?

解決

に応じて Timer 文書では、Java1.5以降、好の ScheduledThreadPoolExecutor です。(できのように作りこのexecutorを使用 Executors.newSingleThreadScheduledExecutor() のための使いやすさ;このように Timer.)

にカッコいいところがスケジュールのタスクの呼び出さ schedule())を返します ScheduledFuture オブジェクトです。利用することができ止の予定です。使わないようご注意ください無料の提出課題が異なるトリガす。

ETA:の Timer 書類にリンクしないと言うことな ScheduledThreadPoolExecutor, しかし、 OpenJDK versionたは次のようにコメントしている。

Java5.0を導入し java.util.concurrent パッケージ 一つの並行処理費を期待することができるの ScheduledThreadPoolExecutor であるスレッドプールを繰り返し タスクの実行で指定する。で効果的に、より 多彩な差し替え用の Timer/TimerTask 組み合わせで、複数のサービスドレスの受け入れ各種 時間単位で、必要としませんが、サブクラス TimerTask ( の実施 Runnable).の設定 ScheduledThreadPoolExecutor 一つのスレッドで同等の Timer.

他のヒント

の場合 Timer でっかいタスクを実行しているのは、サブクラスで

import java.util.Timer;
import java.util.TimerTask;

public class ReschedulableTimer extends Timer
{
    private Runnable  task;
    private TimerTask timerTask;

    public void schedule(Runnable runnable, long delay)
    {
        task = runnable;
        timerTask = new TimerTask()
        {
            @Override
            public void run()
            {
                task.run();
            }
        };
        this.schedule(timerTask, delay);
    }

    public void reschedule(long delay)
    {
        timerTask.cancel();
        timerTask = new TimerTask()
        {
            @Override
            public void run()
            {
                task.run();
            }
        };
        this.schedule(timerTask, delay);
    }
}

また、コードの追加をチェックのための誤用でをすべきだと考えている。の ScheduledThreadPoolExecutor しているようには思えない内蔵のサービスをご利用いただけ変更、既存の課題からも同様のアプローチは示されている場合もあります。

全体のコードスニペットは以下のようになります....あなたにとってどんな年でしたが、フローラルホール

{

        Runnable r = new ScheduleTask();
        ReschedulableTimer rescheduleTimer = new ReschedulableTimer();
        rescheduleTimer.schedule(r, 10*1000);


    public class ScheduleTask implements Runnable {
        public void run() {
            //Do schecule task

        }
      }


class ReschedulableTimer extends Timer {
        private Runnable task;
        private TimerTask timerTask;

        public void schedule(Runnable runnable, long delay) {
          task = runnable;
          timerTask = new TimerTask() { 
              public void run() { 
                  task.run(); 
                  }
              };

          timer.schedule(timerTask, delay);        
        }

        public void reschedule(long delay) {
            System.out.println("rescheduling after seconds "+delay);
          timerTask.cancel();
          timerTask = new TimerTask() { 
              public void run() { 
                  task.run(); 
              }
          };
          timer.schedule(timerTask, delay);        
        }
      }


}

させていただきます。予定を繰り返す。その場合にはお勧めします。検討 石英.

とは思わないでい Timer/TimerTask, ものによって何を達成したいのが嬉しい利用 java.util.concurrent.ScheduledThreadPoolExecutor.

このようにしています。しているクラスの世論調査データベース60秒ご利用TimerTask.

私のメインクラスまたはインスタンスのタイマーのインスタンスもサブクラスのTimerTask.のクラスは、法定のポーリング間隔(例えば今から60 30分)までとなります。に、これまでのキャンセルTimerTaskるもの(サブクラスは、overwroteない場合はキャンセルの方法をいくつかの清掃がいなしでnullになります。った形での新しいインスタンスで、スケジュールの新しいインスタンスを新しい区間の既存のタイマー.

以来、タイマーなが消滅した場合、そのスレッドで使用したアクティブ(その他のTimerTasksの中で、旧TimerTaskが新しくなり、そっくり同じですが、バージン(年齢の違いによって実行され、予定ではなくなったヴァージンとして必要なケジューリング).

りたいときにシャットダウンのタイマー、キャンセル-nullのTimerTaskと同じかったのを変更する場合には、そのタイミングに、清掃のための資源を私のクラスのサブクラスTimerTask、その後の解除およびnullの場合、タイマーです。

ここでは例Resetableますテットンと申します。を変更してみてくださいであるかどうか、そしてあなたのconvinence...

package com.tps.ProjectTasks.TimeThread;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

/**
 * Simple demo that uses java.util.Timer to schedule a task to execute
 * every 5 seconds and have a delay if you give any input in console.
 */

public class DateThreadSheduler extends Thread {  
    Timer timer;
    BufferedReader br ;
    String data = null;
    Date dNow ;
    SimpleDateFormat ft;

    public DateThreadSheduler() {

        timer = new Timer();
        timer.schedule(new RemindTask(), 0, 5*1000); 
        br = new BufferedReader(new InputStreamReader(System.in));
        start();
    }

    public void run(){

        while(true){
            try {
                data =br.readLine();
                if(data != null && !data.trim().equals("") ){
                    timer.cancel();
                    timer = new Timer();
                    dNow = new Date( );
                    ft = new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
                    System.out.println("Modified Current Date ------> " + ft.format(dNow));
                    timer.schedule(new RemindTask(), 5*1000 , 5*1000);
                }

            }catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String args[]) {
        System.out.format("Printint the time and date was started...\n");
        new DateThreadSheduler();
    }
}

class RemindTask extends TimerTask {
    Date dNow ;
    SimpleDateFormat ft;

    public void run() {

        dNow = new Date();
        ft = new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
        System.out.println("Current Date: " + ft.format(dNow));
    }
}

この例では、版画の現在の日付と時間5秒で---なければ入力コンソールにはタイマー時間を変更することを、指定された入力。

また、自分のタイマーのクラスに同様の目的お気軽にご利用い:

public class ReschedulableTimer extends Timer {
  private Runnable mTask;
  private TimerTask mTimerTask;

  public ReschedulableTimer(Runnable runnable) {
    this.mTask = runnable;
  }

  public void schedule(long delay) {
    if (mTimerTask != null)
      mTimerTask.cancel();

    mTimerTask = new TimerTask() {
      @Override
      public void run() {
        mTask.run();
      }
    };
    this.schedule(mTimerTask, delay);
  }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top