如何调用函数每隔一小时? 另外,我这个循环怎么可以?(How to call function

2019-07-29 13:23发布

我需要一个简单的方法来调用一个函数每隔60分钟。 我怎样才能做到这一点? 我正在做的Minecraft bukkit插件,这是我所:

package com.webs.playsoulcraft.plazmotech.java.MineRegen;

import java.util.logging.Logger;

import org.bukkit.Location;
import org.bukkit.block.Block;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.plugin.java.JavaPlugin;


public class Main extends JavaPlugin{

    public final Logger log = Logger.getLogger("Minecraft");


    @Override
    public void onEnable() {
        this.log.info("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
        this.log.info("Plaz's Mine Regen is now enabled!");
        this.log.info("Copyright 2012 Plazmotech Co. All rights reserved.");
        this.log.info("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
    }

    @Override 
    public void onDisable() {
        this.log.info("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
        this.log.info("Plaz's Mine Regen is now disabled!");
        this.log.info("Copyright 2012 Plazmotech Co. All rights reserved.");
        this.log.info("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
    }

    public void onPlayerInteract(PlayerInteractEvent event) {
        final Action action = event.getAction();
        if (action == Action.LEFT_CLICK_BLOCK) {
            Location l1 = event.getClickedBlock().getLocation();
        } else if (action == Action.RIGHT_CLICK_BLOCK) {
            Location l2 = event.getClickedBlock().getLocation();
        }
    }
}

我需要运行一个功能,我将实现每隔一小时,怎么样? 记住:该函数将使用L1,L2等。 此外,我怎么能循环这其间获得每一块?

Answer 1:

创建一个Timer对象,并给它一个TimerTask执行要执行的代码。

Timer timer = new Timer ();
TimerTask hourlyTask = new TimerTask () {
    @Override
    public void run () {
        // your code here...
    }
};

// schedule the task to run starting now and then every hour...
timer.schedule (hourlyTask, 0l, 1000*60*60);

如果你声明hourlyTask你的内onPlayerInteract功能,那么你就可以访问l1l2 。 为了使该编译,你需要他们两个标记为final

使用的优点Timer对象是,它可以处理多个TimerTask对象,每个都有自己的时间,延迟等,还可以就只要你持有到停止定时器Timer ,宣布它作为一类对象变量或东西。

我不知道如何让每块之间。



Answer 2:

创建将永远运行,并每隔一小时醒来执行数据的线程。

Thread t = new Thread() {
    @Override
    public void run() {
        while(true) {
            try {
                Thread.sleep(1000*60*60);
                //your code here...
            } catch (InterruptedException ie) {
            }
        }
    }
};
t.start();


Answer 3:

您必须使用Bukkit调度:

public void Method(){
    this.getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
        @Override
        public void run() {
            // Your code goes here
            Method();
        }
    }, time * 20L );
}

你必须创建这个方法,有必须调用相同的方法。



Answer 4:

  1. 最简单的方法(在我看来)是使用Thread (上述评论已提到这件事)。
  2. 您还可以使用Timerjavax.swing.Timer
  3. 但我认为-如101100说-你可以使用TimerTask 。 您可以检查此链接 (来自IBM)


文章来源: How to call function every hour? Also, how can I loop this?