争论不匹配;方法无法转换为TimerTask

时间:2018-03-20 12:32:24

标签: java timer schedule timertask

我一直都会遇到这种错误:

  

错误:找不到合适的计划方法(足球,整数)

     

方法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");
}
}

抱歉发帖不好,第一次这样做。

2 个答案:

答案 0 :(得分:1)

您正在创建soccer类型的新对象 soccer three = new soccer();
然后你试图传递这个&#34;足球&#34;作为计时器计划功能的第一个参数 但schedule函数需要第一个参数为TimerTask类型。

您需要做的是

  • 让您的足球课程从TimerTask扩展

  • @Override run()函数。

  • 创建一个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()

答案 1 :(得分:1)

班级soccer需要延长TimerTask才能由Timer安排,如下所示:

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

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

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