繁体   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