2017-10-19 159 views
0

我有以下問題: 我正在寫一個聊天機器人在Java中,我想打電話甚至x分鐘的方法。 所以我讀了一個「Timer.Schedule」是我需要的。所以我寫了下面的方法:Java Timer.Schedule(英菲尼迪循環)停止運行

public function timerMethod() 
{ 
    int time = 10; 

    ... 

    new java.util.Timer().schedule(
     new java.util.TimerTask() { 
      @Override 
      public void run() { 
       timerMethod(); 
      } 
     }, 1000 * 60 * time // 1MSec * 1Sec * xMin 
    ); 
} 

在循環工作正常開始,但幾個小時(我認爲這是10至15小時後)的循環不工作了...... 我不知道爲什麼我後不工作,並沒有得到任何錯誤消息:(

有人可以幫助我pleace ???

+0

是否有可能在'timerMethod()'中引發異常?用'try'' catch'嘗試圍繞呼叫並記錄/打印拋出異常的任何細節以消除這種可能性, –

+0

我嘗試但不例外...終端顯示沒有錯誤或異常... – padhie

回答

0

所以,你要代碼爲x分鐘運行,正確嗎?

如果是這樣,轉換所需的時間運行時間爲幾毫秒的代碼如下所示:1分鐘= 60000毫秒。有一個名爲System.currentTimeMillis()的方法,它將從EPOCH日期(1970年1月1日)返回一個毫秒值。

您可以使用while循環是這樣的:

`

int msTime = 60000; //1 Minute = 60000 MS 
int doUntil = ms + System.currentTimeMillis(); //1 minute 
while(System.currentTimeMillis() != doUntil) 
{ 
    //Code here 
    System.out.println(¨Hello World¨); //This will print Ḧello World for 60000ms 

} 
+0

你的意思是這個代碼而不是我的Timer()。Schedule()? – padhie

0

嗯那麼首先你可以停止實例多次java.util.Timer()變量。你只需要一個作爲該類的一個屬性。 timerTask是唯一應該重新實例化的那個。

private Timer timer = new Timer(); 

現在,環繞運行函數中的代碼try/catch語句:

  public void run() { 
      try { 
       timerMethod(); 
      } catch(InterruptedException e) { 
       e.printStackTrace(); 
      } 
     } 

你叫那timerMethod只有一次?您也可以在代碼中添加一些打印內容,以便在您重新計劃功能和運行方法時進行檢查。

+0

Try/Catch我tryed但沒有例外或錯誤... 我有3個其他計時器,我可以使用相同的計時器對象或必須爲每個計時器做一個自己的對象嗎? – padhie