2017-10-19 163 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