Java Timer.Schedule (无限循环) 停止 运行

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() 的方法,这将 return 从 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() 变量。您只需要一个作为 class 的属性。 timerTask 是那里唯一应该重新实例化的任务。

private Timer timer = new Timer();

现在,用 try/catch:

将 运行 函数内的代码包围起来
            public void run() {
            try {
                timerMethod();
            } catch(InterruptedException e) {
                e.printStackTrace();
            }
        }

您是否只调用了一次 timerMethod?您也可以在此代码中添加一些打印,以便在您重新安排您的函数以及何时 运行 您的方法时进行检查。