【问题标题】:TimerTask not applicable to argumentsTimerTask 不适用于参数
【发布时间】:2017-03-25 02:56:14
【问题描述】:

我的主程序如下:

package priceCollector;

import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URL;
import java.text.DateFormat;
import java.util.Date;

public class App extends TimerTask {

    public static void main(String[] args) {

        Date now = new Date();
        DateFormat df = DateFormat.getDateInstance();
        String s = df.format(now);

        String fileName = "/Users/Desktop/" + s + ".csv";

        URL link = null;
        try {
             link = new URL("http://finance.yahoo.com/d/quotes.csv?s=III.L+ADM.L+AAL.L+ANTO.L+AHT.L+ABF.L+AZN.L+AV.L+BAB.L+BA.L+BARC.L+BDEV.L+BLT.L+BP.L+BATS.L+BLND.L+BTA.L+BNZL.L+BRBY.L+CPI.L+CCL.L+CNA.L+CCH.L+CPG.L+CRH.L+CRDA.L+DCC.L+DGE.L+DLG.L+DC.L+EZJ.L+EXPN.L+FRES.L+GKN.L+GSK.L+GLEN.L+HMSO.L+HL.L+HIK.L+HSBA.L+IMB.L+INF.L+IHG.L+IAG.L+ITRK.L+INTU.L+ITV.L+JMAT.L+KGF.L+LAND.L+LGEN.L+LLOY.L+LSE.L+MKS.L+MDC.L+MERL.L+MCRO.L+MNDI.L+MRW.L+NG.L+NXT.L+OML.L+PPB.L+PSON.L+PSN.L+POLY.L+PFG.L+PRU.L+RRS.L+RB.L+REL.L+RIO.L+RR.L+RBS.L+RDSA.L+RDSB.L+RMG.L+RSA.L+SGE.L+SBRY.L+SDR.L+SVT.L+SHP.L+SKY.L+SN.L+SMIN.L+SSE.L+STJ.L+STAN.L+SL.L+TW.L+TSCO.L+TPK.L+TUI.L+ULVR.L+UU.L+VOD.L+WTB.L+WOS.L+WPG.L+WPP.L&f=np");

             InputStream in = new BufferedInputStream(link.openStream());
             ByteArrayOutputStream out = new ByteArrayOutputStream();
             byte[] buf = new byte[1024];
             int n = 0;
             while (-1!=(n=in.read(buf))){
                out.write(buf, 0, n);
             }
             out.close();
             in.close();
             byte[] response = out.toByteArray();

             FileOutputStream fos = new FileOutputStream(fileName);
             fos.write(response);
             fos.close();
        } catch (Exception e) {
            System.out.println("not available");
        }
    }
}

这在单独运行时工作正常,但是我正在尝试设置一个定期时间表,使其每天运行。我的 TimerTask 程序是:

package priceCollector;

import java.util.Calendar;
import java.util.Timer;
import java.util.concurrent.TimeUnit;

public class TimerTask {

    public void runTask(){

        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.HOUR_OF_DAY, 21);
        calendar.set(Calendar.MINUTE, 15);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);

        Timer time = new Timer(); // Instantiate Timer Object

        // Start running the task on Thursday at 21:15:00, period is set to 1 day
        // if you want to run the task immediately, set the 2nd parameter to 0
        time.schedule(new App(), calendar.getTime(), TimeUnit.HOURS.toMillis(8));  
    }
}

最后一行(schedule 参数)给出以下错误:

Timer 类型中的方法 schedule(TimerTask, Date, long) 不是 适用于参数(App、Date、long)

不确定这是什么。 Java新手!谢谢。

【问题讨论】:

  • 您的问题是,您尝试使用App 类型的对象而不是TimerTask 来调用方法schedule(...)。错误消息基本上说您作为参数传递的类型不匹配。试试new TimerTask(...) 代替(因为我不知道这个类,所以无法帮助你解决争论......)

标签: java scheduled-tasks timertask


【解决方案1】:

第二个参数是初始延迟,如下API所示:

//Example, If you want to configure the initial delay as 5 seconds
time.schedule(new App(), 5000, TimeUnit.HOURS.toMillis(8));

public void schedule(TimerTask task, long delay, long period)

task - 要安排的任务。

delay - 任务执行前的延迟毫秒数。

周期 - 连续任务执行之间的时间(以毫秒为单位)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多