我有一个方法,我希望它被安排在以后的时间执行。调度时间和方法的参数取决于用户输入。如何将参数传递到Timertask运行方法
我已经尝试了定时器,但我有一个问题。
怎么可能将参数传递给Java TimerTask运行方法?
TimerTask timert = new TimerTask()
{
@Override
public void run()
{
//do something
}
}
我有一个方法,我希望它被安排在以后的时间执行。调度时间和方法的参数取决于用户输入。如何将参数传递到Timertask运行方法
我已经尝试了定时器,但我有一个问题。
怎么可能将参数传递给Java TimerTask运行方法?
TimerTask timert = new TimerTask()
{
@Override
public void run()
{
//do something
}
}
您需要延长TimerTask
并创建一个构造器和/或setter领域。然后调度TimerTask
执行之前设置你想要的值。
要做到这一点的唯一方法是创建自己的类来扩展TimerTask并将参数传递给它的构造函数或调用它的setter。因此,任务将从其创建时刻“知道”它的论点。
此外,如果它提供setter,您可以在任务已经安排完毕后更改任务配置。
你可以写你自己的类,它从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
}
}
+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()
方法中初始化。
使参数变为一个字段,然后您可以在您的运行方法 – Neifen