6

メソッドがあり、後で実行するようにスケジュールしたい。スケジューリング時間とメソッドの引数は、ユーザー入力によって異なります。

すでにタイマーを試しましたが、質問があります。

どうすればJavaTimerTask実行メソッドに引数を渡すことができますか?

TimerTask timert = new TimerTask() 
{
     @Override
     public void run() 
     {
           //do something
     }
}   
4

5 に答える 5

30

TimerTaskクラスから拡張する独自のクラスを記述し、runメソッドをオーバーライドすることができます。

class MyTimerTask extends TimerTask  {
     String param;

     public MyTimerTask(String param) {
         this.param = param;
     }

     @Override
     public void run() {
         // You can do anything you want with param 
     }
}
于 2011-09-22T09:04:07.710 に答える
8

TimerTaskを拡張し、コンストラクターおよび/またはセッターフィールドを作成する必要があります。次にTimerTask、実行をスケジュールする前に、必要な値を設定します。

于 2011-09-22T09:01:19.847 に答える
2

メソッドのシグネチャを変更することはできませんrun()

ただし、TimerTaskのサブクラスを作成して、ある種の初期化メソッドを指定することはできます。次に、必要な引数を使用して新しいメソッドを呼び出し、それらをサブクラスのフィールドとして保存してから、run()-methodでそれらの初期化されたフィールドを参照できます。

abstract class MyTimerTask extends TimerTask
{
  protected String myArg = null;
  public void init(String arg)
  {
    myArg = arg;
  }
}

...

MyTimerTask timert = new MyTimerTask() 
{
  @Override
  public void run() 
  {
       //do something
       System.out.println(myArg);
  }
} 

...

timert.init("Hello World!");
new Thread(timert).start();

フィールドは。の(匿名の)サブクラスには表示されないprotectedため、必ずフィールドの可視性をに設定してください。また、フィールドがメソッドで初期化されているかどうかを確認することを忘れないでください。privateMyTimerTaskrun()

于 2011-09-22T09:10:18.690 に答える
1

これを行う唯一の方法は、TimerTaskを拡張し、そのコンストラクターに引数を渡すか、そのセッターを呼び出す独自のクラスを作成することです。したがって、タスクは、作成された瞬間から引数を「認識」します。

さらに、セッターが提供されている場合は、タスクがすでにスケジュールされた後でも、タスク構成を変更できます。

于 2011-09-22T09:03:32.267 に答える
0
class thr extends TimerTask{    
@Override
public void run(){
    System.out.println("task executed task executed .........." );
}               


class service { 
private Timer t;    
public void start(int delay){
    Timer timer=new Timer();
    thr task =new thr();                        
    timer.schedule(task, delay);        
    this.t=timer;
}   
public void stop(){
    System.out.println("Cancelling the task scheduller ");
    this.t.cancel();
}
}

public class task1 {
  public static void main(String[] args) {

    service sv=new service();
    sv.start(1000);
    System.out.println("This will check the asynchronous behaviour ");
    System.out.println("This will check the asynchronous behaviour ");
    System.out.println("This will check the asynchronous behaviour ");
    System.out.println("This will check the asynchronous behaviour ");
    System.out.println("This will check the asynchronous behaviour ");
    sv.stop();

  } 
}

上記のコードは、タイマー機能を使用してタスクを設定およびリセットできるタスクをスケジュールおよび再スケジュールするために正常に機能します

于 2018-08-27T02:58:34.920 に答える