2016-09-20 14 views
1

Timer.scheduleに基づいて実行する必要があるTiimerTaskがあります。Java Timer.scheduleは一度だけ実行されます

これはTimerTaskを

public class ClientScheduler extends TimerTask { 

    public String serverUrl = Start.getHost(); 
    public String append = "/client/checkVersion"; 
    public String numeroClient = null; 
    public String actualVersion = null; 
    public String filePrefix = "eparkclient-"; 
    public String fileSuffix = "-jar-with-dependencies.jar"; 
    private final Logger logger = Logger.getLogger(ClientScheduler.class); 

    public ClientScheduler() { 

    } 

    @Override 
    public void run() { 



       logger.debug("Scheduler starts"); 
       String finalUrl = null; 
       try { 
        numeroClient = PropertyConfig.getClientId(); 

        actualVersion = PropertyConfig.getFirmwareVersion(); 
        finalUrl = serverUrl + append + "?numeroClient=" + numeroClient; 

        HttpConnection http = new HttpConnection(); 
        String result = http.getHTTPResponse(finalUrl); 
        JSONObject json = new JSONObject(result); 
        String firmwareVersion = json.getString("firmwareVersion"); 
        Boolean updated = json.getBoolean("firmwareUpdated"); 

        if(!actualVersion.equalsIgnoreCase(firmwareVersion)){ 
         //scarico il file dall'ftp 
         FTPDownload ftp = new FTPDownload(); 
         String filename = filePrefix+firmwareVersion+fileSuffix; 
         logger.debug("filename è "+filename); 
         boolean success = ftp.getFile(filename); 
         if(success) { 
          //scrivo la versione nuova sul file 
          PropertyConfig.setFirmwareVersion(firmwareVersion); 
          //comunico al server l'aggiornamento riuscito 
          HttpConnection answer = new HttpConnection(); 
          String url = serverUrl + "/client/pushUpdate?numeroClient=" + numeroClient + "&firmwareVersion=" + 
          firmwareVersion + "&updated=0"; 

          String r = answer.getHTTPResponse(url); 
          System.exit(0); 

         } 


        } else if(actualVersion.equalsIgnoreCase(firmwareVersion) && !updated){ //ho riavviato, devo aggiornare il DB 

         HttpConnection answer = new HttpConnection(); 
         String url = serverUrl + "/client/pushUpdate?numeroClient=" + numeroClient + "&firmwareVersion=" + 
         firmwareVersion + "&updated="+!updated; 

         String r = answer.getHTTPResponse(url); 

        } else { 
         logger.debug("Non dobbiamo fare niente"); 
        } 
       } catch (IOException e) { 
        logger.error("Errore Property", e); 

       } 
      } 

    } 

を拡張私のクラスのタスクが呼ばれている... 問題は は多分それが何か保留中です...アプリケーションの起動時に一度だけ実行されますが、私は何を理解することはできませんアプリケーションがこのように起動するとき

public static void main(String[] args) throws Exception { 
     logger.info("L'ip del client è " + getCurrentIP()); 

     //faccio partire lo scheduler 
     logger.debug("Scheduler called"); 

     Timer timer = new Timer(); 
     timer.schedule(new ClientScheduler(), 10*1000); 
+1

あなたは[ドキュメント]を読みました(http://docs.oracle.com/javase/8/docs/api/java/util/Timer.html#schedule- java.util.TimerTask-long-)?繰り返し実行するには、3つの引数をとる 'schedule'メソッドを呼び出す必要があります。 – VGR

答えて

2

タイマータスクを1回だけスケジュールします。

はスケジュール法は

スケジュール(TimerTaskをタスク、長い遅延)

スケジュール指定された遅延後に実行するために指定されたタスク として定義されます。

しかし、あなたは、このメソッドを使用する必要があります。

スケジュール(TimerTaskをタスク、長時間の遅延、長い期間)ため

スケジュール指定されたタスクが が始まり、固定遅延実行を繰り返し、指定された遅延の後。

ここ

参照のJavadoc:https://docs.oracle.com/javase/8/docs/api/java/util/Timer.html#schedule-java.util.TimerTask-long-long-

関連する問題