【问题标题】:a new instance of a class extends TimerTask can not be instantiated from the main类的新实例扩展 TimerTask 不能从主实例化
【发布时间】:2015-02-01 01:15:37
【问题描述】:

我有以下timed task

static TimerTask timedTask = new TimerTask() {

    @Override
    public void run() {
        // TODO Auto-generated method stub
        System.out.println("timed task");
    }
};

//main method
main(...) {
Timer timer = new Timer();
    timer.schedule(timedTask, (long) logfile.getFileHash().get(1).getTimeStampInMilli());
}

我想做的是,创建一个扩展TimerTask 的类,以便我可以随时创建一个新的timerTask。但问题是当我按如下方式创建类时:

class TimerTask2 extends TimerTask {

    @Override
    public void run() {
        // TODO Auto-generated method stub

    }
}

一行

timer.schedule(new TimerTask2(), (long) logfile.getFileHash().get(i).getTimeStampInMilli()); 被 ecipse 高亮显示:

无法访问 File_IO 类型的封闭实例。必须使用 File_IO 类型的封闭实例来限定分配(例如 x.new A(),其中 x 是 File_IO 的实例)。

我试图用主类名来限定类实例,但它也不起作用。

请为此提供建议。

【问题讨论】:

标签: java android timertask


【解决方案1】:

给 TimerTask2 添加静态修饰符:

static class TimerTask2 extends TimerTask {
    @Override
    public void run() {
    }
}

【讨论】:

  • 这是因为 main() 是静态的并且 TimerTask2 是在 main 的类中定义的。这与您尝试从静态方法读取非静态字段相同。
猜你喜欢
  • 2021-02-19
  • 2012-10-08
  • 2013-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多