我有一个while函数。正确时,我只想每1秒钟进行一次。我不能使用Thread.sleep()
,因为我正在制作Minecraft插件,它将停止服务器上的所有进程。还有另一种方法吗?
感谢您的答复。
答案 0 :(得分:4)
您要寻找的是Bukkit Scheduler
。它已集成到默认插件API中,可用于解决以下任务:
int taskID = Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() {
@Override
public void run() {
// do stuff
}
}, delay, repeat);
将delay
设置为0,将重复项设置为20
(20滴答声是1秒)。
使用以下命令停止它:
Bukkit.getScheduler().cancelTask(taskID);
答案 1 :(得分:0)
您可以创建一个java.util.TimerTask 它可以在指定的时间延迟后安排您的任务。 此处有更多详细信息:https://www.geeksforgeeks.org/java-util-timertask-class-java/
答案 2 :(得分:0)
如果您在主Thread.sleep()
中使用Thread
,则会阻塞main thread
,为避免这种情况,您需要创建一个单独的线程传递,然后处理任何处理所需的值您想在自己的线程中添加一些代码段进行澄清:
public static boolean ENABLE_THREAD = true;
public static void main(String args[]){
InnerThread minecraftThread = (new ThreadStack()).new InnerThread();
minecraftThread.run();
}
public class InnerThread implements Runnable{
@Override
public void run() {
int counter=0;
while(ENABLE_THREAD){
try {
//YOUR CODE
System.out.println(counter);
Thread.sleep(1000);
counter++;
if(counter>10){
ENABLE_THREAD = false;
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
答案 3 :(得分:-1)
您可以使用import json
content = json.loads(open('timings.json', 'r').read())
new_json = {'times': []}
for item in content['times']:
if item['Proc'] != 'APS':
new_json['times'].append(item)
file = open('timings.json', 'w')
file.write(json.dumps(new_json, indent=4, sort_keys=False, ensure_ascii=False))
file.close()
:
System.currentTimeMillis()
答案 4 :(得分:-2)
这是我能想到的最简单的解决方案。请检查它是否适合您。
long start = new Date().getTime();
while(new Date().getTime() - start < 1000L)
{
//Do Something every 1sec
//you need to update the start value everytime
start = new Date().getTime();
}