使用Catch和计时器返回功能

时间:2015-07-06 03:06:31

标签: java github egit github-api

我正在使用 GitHub API ,但由于速率限制,它会引发异常。 我使用catch来捕获此异常,但我想使用1小时的计时器计数并继续从停止的位置开始的函数。

try{
      // my function
}
catch (NoSuchPageException e ) {
    Thread.sleep(3600 * 1000);
    System.out.println("Waiting the timer");            
}

如何在计时器结束后继续我的功能?

2 个答案:

答案 0 :(得分:0)

您的问题尚不清楚,但如果您希望检索html内容,但如果您在调用该功能后1小时内没有内容,则可以继续使用期货:

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;
import java.util.concurrent.TimeUnit;

public class FutureExample {

    static class RetrieveHTMLThingy implements Callable<String> {
        @Override
        public String call() throws Exception {
            System.out.println("Getting HTML Stuff");
            Thread.sleep(2000);
            return "html stuff";
        }
    }

    public static void main(String[] args) {
        ExecutorService executor = Executors.newFixedThreadPool(2);
        FutureTask<String> getHTML = new FutureTask<String>(new RetrieveHTMLThingy());
        executor.execute(getHTML);
        try {
            System.out.println(getHTML.get(1, TimeUnit.HOURS));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

答案 1 :(得分:0)

我想你可以使用while循环。

boolean continueFunc = false;
while (!continueFunc)
    try{
        //my function
        continueFunc = true;
    }
    catch (NoSuchPageException e ){
        Thread.sleep(3600 * 1000);
        System.out.println("Waiting the timer");            
    }
}