簡體   English   中英

Java Timer.Schedule(infiniti循環)停止運行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM