[英]Java Timer.Schedule (infiniti loop) stop running
我有以下問題:我正在用Java寫一個聊天機器人,我想調用一個方法,甚至x分鍾。 所以我需要閱讀“ 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個小時后),循環不再工作了……我不知道為什么我不工作,也沒有收到任何錯誤消息:(
有人可以幫我取悅嗎???
所以您想讓代碼運行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
}
嗯,首先,您可以停止多次實例化java.util.Timer()
變量。 您只需要一個作為類的屬性。 timerTask是唯一應該在那里重新初始化的計時器。
private Timer timer = new Timer();
現在,用try / catch將代碼包含在run函數中:
public void run() {
try {
timerMethod();
} catch(InterruptedException e) {
e.printStackTrace();
}
}
您只調用一次timerMethod嗎? 您也可以在此代碼中添加一些打印內容,以檢查何時重新安排函數的時間以及何時運行方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.