【问题标题】:Argument mismatch; method cannot be converted to TimerTask参数不匹配;方法无法转换为 TimerTask
【发布时间】:2018-03-20 12:32:24
【问题描述】:

我不断收到这种错误:

错误:找不到合适的方法用于 schedule(soccer,int)

方法Timer.schedule(TimerTask,long)不适用

(参数不匹配;足球无法转换为 TimerTask)

方法Timer.schedule(TimerTask,Date)不适用

(参数不匹配;足球无法转换为 TimerTask)

import java.util.*;
public class Balls{
    private static int time = 1;

    public static void main(String[] args){
        int a=0,b=0,c=0,d=0,e=0;
        volley one = new volley();
        beach two = new beach();
        soccer three = new soccer();
        basket four = new basket();
        pokemon five = new pokemon();

        Timer myTime1 = new Timer();
        Timer myTime2 = new Timer();
        Timer myTime3 = new Timer();
        Timer myTime4 = new Timer();
        Timer myTime5 = new Timer();

        for(int x=0; x<20000; x+=5000){
            if(x==5000){
                myTime1.schedule(one,(x-1000));
                myTime1.schedule(two,(x+500));
                myTime1.schedule(three,(x-500));
                myTime1.schedule(four,(x+1000));
                myTime1.schedule(five,(x-500));
            }
            else if(x==10000){
                myTime1.schedule(one,(x+500));
                myTime1.schedule(two,(x-1000));
                myTime1.schedule(three,(x+1000));
                myTime1.schedule(four,(x-500));
                myTime1.schedule(five,(x+500));
            }
            else if(x==15000){
                myTime1.schedule(one,(x-500));
                myTime1.schedule(two,(x+1000));
                myTime1.schedule(three,(x+500));
                myTime1.schedule(four,(x+500));
                myTime1.schedule(five,(x+1000));
            }
            else if(x==20000){
                myTime1.schedule(one,(x+1000));
                myTime1.schedule(two,(x-500));
                myTime1.schedule(three,(x-1000));
                myTime1.schedule(four,(x-1000));
                myTime1.schedule(five,(x-1000));
            }
            else{
                break;
            }
        }    
    }
}

class volley extends TimerTask{
public void run(){
    System.out.println("Volley ball");
}
}
class beach extends TimerTask{
public void run(){
    System.out.println("Beach ball");
}
}
class soccer{
public void run(){
    System.out.println("Soccer ball");
}
}
class basket{
public void run(){
    System.out.println("Basket ball");
}
}
class pokemon{
public void run(){
    System.out.println("Pokemon Ball");
}
}

第一次发帖,见谅。

【问题讨论】:

    标签: java timer schedule timertask


    【解决方案1】:

    soccer需要扩展TimerTask才能被Timer安排,像这样:

    class soccer extends TimerTask {
       @Override
       public void run(){
           System.out.println("Soccer ball");
       }
    }
    

    这同样适用于篮子和口袋妖怪课程。

    实际上,您的代码无法编译,因为这些类不是TimerTask 的实例,而您尝试在myTime1.schedule 中使用它们

    【讨论】:

      【解决方案2】:

      您正在创建soccer类型的新对象
      soccer three = new soccer();
      然后您尝试将这个“足球”类型的对象作为计时器调度函数的第一个参数传递。
      但 schedule 函数要求第一个参数是 TimerTask 类型。

      你需要做的是

      • 让你的足球课从 TimerTask 扩展

      • @Overriderun() 函数。

      • 创建一个 TimerTask 类型的新对象(因为您的类扩展了 TimerTask,请参见下面的示例)

      例如:

      class soccer extends TimerTask{
          @Override
          public void run(){
              System.out.println("Soccer ball");
          }
      }
      

      那么你只需要像这样创建对象

      TimerTask three = new soccer();
      

      从 TimerTask 扩展还为您提供 cancel()scheduledExecutionTime() 函数。
      后者返回此任务最近一次实际执行的计划执行时间。
      cancel() 非常不言自明,它取消了计时器任务。

      所以你可以调用例如:

      three.cancel()    
      

      long execTime = three.scheduledExecutionTime()
      

      【讨论】:

        猜你喜欢
        • 2020-09-12
        • 1970-01-01
        • 1970-01-01
        • 2019-01-16
        • 2016-03-13
        • 2014-02-12
        • 2014-04-16
        • 2017-12-31
        • 1970-01-01
        相关资源
        最近更新 更多