メソッドがあり、後で実行するようにスケジュールしたい。スケジューリング時間とメソッドの引数は、ユーザー入力によって異なります。
すでにタイマーを試しましたが、質問があります。
どうすればJavaTimerTask実行メソッドに引数を渡すことができますか?
TimerTask timert = new TimerTask()
{
@Override
public void run()
{
//do something
}
}
メソッドがあり、後で実行するようにスケジュールしたい。スケジューリング時間とメソッドの引数は、ユーザー入力によって異なります。
すでにタイマーを試しましたが、質問があります。
どうすればJavaTimerTask実行メソッドに引数を渡すことができますか?
TimerTask timert = new TimerTask()
{
@Override
public void run()
{
//do something
}
}
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
}
}
TimerTask
を拡張し、コンストラクターおよび/またはセッターフィールドを作成する必要があります。次にTimerTask
、実行をスケジュールする前に、必要な値を設定します。
メソッドのシグネチャを変更することはできません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
ため、必ずフィールドの可視性をに設定してください。また、フィールドがメソッドで初期化されているかどうかを確認することを忘れないでください。private
MyTimerTask
run()
これを行う唯一の方法は、TimerTaskを拡張し、そのコンストラクターに引数を渡すか、そのセッターを呼び出す独自のクラスを作成することです。したがって、タスクは、作成された瞬間から引数を「認識」します。
さらに、セッターが提供されている場合は、タスクがすでにスケジュールされた後でも、タスク構成を変更できます。
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();
}
}
上記のコードは、タイマー機能を使用してタスクを設定およびリセットできるタスクをスケジュールおよび再スケジュールするために正常に機能します