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?您也可以在此代码中添加一些打印,以便在您重新安排您的函数以及何时 运行 您的方法时进行检查。
我有以下问题: 我正在 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?您也可以在此代码中添加一些打印,以便在您重新安排您的函数以及何时 运行 您的方法时进行检查。