有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java TimerTask未执行

我正在编程一个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

希望你会发现


共 (2) 个答案

  1. # 1 楼答案

    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();
        }
    }
    
  2. # 2 楼答案

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

    预定固定日期

    范例

    雷洛伊。scheduleAtFixedRate(新的Reloj(),0,1000)

    你可以做下一个

    /*
     * 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);
    
        }
    
    }
    

    结果是

    run: Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo Corriendo BUILD STOPPED (total time: 1 minute 10 seconds)