2011-09-22 13 views
4

我有一个方法,我希望它被安排在以后的时间执行。调度时间和方法的参数取决于用户输入。如何将参数传递到Timertask运行方法

我已经尝试了定时器,但我有一个问题。

怎么可能将参数传递给Java TimerTask运行方法?

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

使参数变为一个字段,然后您可以在您的运行方法 – Neifen

回答

6

您需要延长TimerTask并创建一个构造器和/或setter领域。然后调度TimerTask执行之前设置你想要的值。

1

要做到这一点的唯一方法是创建自己的类来扩展TimerTask并将参数传递给它的构造函数或调用它的setter。因此,任务将从其创建时刻“知道”它的论点。

此外,如果它提供setter,您可以在任务已经安排完毕后更改任务配置。

24

你可以写你自己的类,它从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 
    } 
} 
+0

+1中获取详细示例,但请大写“字符串”一词。 –

1

无法更改run()方法的签名。

但是,您可以创建一个TimerTask的子类并为其提供某种初始化方法。然后你就可以调用新的方法你想要的参数,将它们保存在你的子类字段,然后引用这些初始化场在run() - 方法:

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()方法中初始化。