Java TimerTask未执行

Java TimerTask未执行,java,timer,Java,Timer,我正在编程一个discord机器人,希望在特定时间运行unban。 但是,即使日期在将来,也不会调用TimerTask。 如果日期在过去,timertask将调用instant。 我试着找出一些数据,看看日期是否错了,但它是对的 我想叫它一次 System.out.println("started"); System.out.println(date); Timer timer = new Timer(); timer.schedu

我正在编程一个discord机器人,希望在特定时间运行unban。 但是,即使日期在将来,也不会调用TimerTask。 如果日期在过去,timertask将调用instant。 我试着找出一些数据,看看日期是否错了,但它是对的

我想叫它一次

        System.out.println("started");
        System.out.println(date);
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                System.out.println("called");
                user.openPrivateChannel().complete().sendMessage(
                        "**-Unban-**" +
                                "\n" +
                                "Du wurdest entbannt!"
                ).queue();
                guild.removeRoleFromMember(user.getId(), guild.getRoleById("690579286582624276")).queue();
                guild.addRoleToMember(user.getId(), guild.getRoleById("688733671104053327")).queue();
            }
        }, date);
控制台的输出:

started
Fri Mar 20 17:21:55 UTC 2020

希望你会发现

要使用计时器,应执行下一步操作

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class Main {
    Date date = new Date();// Initialize it as per your requirement
    Timer timer = new Timer();
    TimerTask task = new TimerTask() {
        public void run() {
            System.out.println("called");
            //...
            timer.cancel();
        }
    };

    public void start() {
        timer.schedule(task, date);
    }

    public static void main(String[] args) {
        Main timer = new Main();
        timer.start();
    }
}
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package javaapplication11;

import java.util.TimerTask;

/**
 *
 * @author Sem-6-INGENIERIAINDU
 */
public class Reloj extends TimerTask{

    @Override
    public void run() {
      // Your code
    }

}
预定固定日期

范例

reloj.scheduleAtFixedRate(newreloj(),01000)

你可以做下一个

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package javaapplication11;

import java.util.TimerTask;

/**
 *
 * @author Sem-6-INGENIERIAINDU
 */
public class Reloj extends TimerTask{

    @Override
    public void run() {
      // Your code
    }

}
该类实现计时器 /* *要更改此许可证标题,请在“项目属性”中选择“许可证标题”。 *要更改此模板文件,请选择工具|模板 *然后在编辑器中打开模板。 */ 包javaapplication11

import java.util.Timer;

/**
 *
 * @author Sem-6-INGENIERIAINDU
 */
public class JavaApplication11 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
      Timer reloj=new Timer();
      reloj.scheduleAtFixedRate(new Reloj(), 0, 1000);

    }

}
结果是

跑步:Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo 考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多 考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多 考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多 考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多 考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多 考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多 考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多 考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多 考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多 Corriendo Corriendo构建已停止(总时间:1分10秒)


要使用计时器,请执行下一步操作

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package javaapplication11;

import java.util.TimerTask;

/**
 *
 * @author Sem-6-INGENIERIAINDU
 */
public class Reloj extends TimerTask{

    @Override
    public void run() {
      // Your code
    }

}
预定固定日期

范例

reloj.scheduleAtFixedRate(newreloj(),01000)

你可以做下一个

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package javaapplication11;

import java.util.TimerTask;

/**
 *
 * @author Sem-6-INGENIERIAINDU
 */
public class Reloj extends TimerTask{

    @Override
    public void run() {
      // Your code
    }

}
该类实现计时器 /* *要更改此许可证标题,请在“项目属性”中选择“许可证标题”。 *要更改此模板文件,请选择工具|模板 *然后在编辑器中打开模板。 */ 包javaapplication11

import java.util.Timer;

/**
 *
 * @author Sem-6-INGENIERIAINDU
 */
public class JavaApplication11 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
      Timer reloj=new Timer();
      reloj.scheduleAtFixedRate(new Reloj(), 0, 1000);

    }

}
结果是

跑步:Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo 考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多 考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多 考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多 考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多 考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多 考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多 考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多 考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多 考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多考里恩多 Corriendo Corriendo构建已停止(总时间:1分10秒)


我不想重复。我想在某个日期打电话给它。我已经更新了我的答案。我希望它能满足你的要求。我就是这么做的。我按照您刚才描述的方式再次执行了它,但它仍然不起作用:/@JAN-如果您按原样执行我的代码,您将得到名为的输出。不是吗?如果是,为什么不直接复制我的
TimerTask task=new TimerTask(){…
代码,并将剩余代码放在
System.out.println(“调用的”);
?确保调用了
start
(我已经在
main
中完成了);否则,您将无法获得所需的输出。不,我没有被调用我的代码:我不想重复它。我想在某个日期调用它一次。我已经更新了我的答案。我希望它满足您的要求。这正是我所做的。我按照您刚才描述的方式再次调用它,但它仍然不起作用:/@JAN-如果您按原样执行我的代码,您将我得到输出,
调用了
。不是吗?如果是的话,你为什么不直接复制我的
TimerTask task=new TimerTask(){…
代码,然后把剩下的代码放在
System.out.println(“调用”);
之后?确保调用了
start
(我已经在
main
中完成了);否则,您将无法获得所需的输出。不,我没有被调用我的代码:我不想重复它。我想在某个日期调用它一次。您只需将日期以小时为单位。一天有86.400.000毫秒计时器reloj=new Timer();reloj.scheduleAtFixedRate(new reloj(),0,86400000);我不想重复。我想在日期处调用它一次。您只需将日期以小时为单位。一天有86.400.000毫秒计时器reloj=new Timer();reloj.scheduleAtFixedRate(new reloj(),0,86400000);