2017-10-29 269 views
-2

所以,我试图每8秒发送一个数据包(使用Spigot)。 我会在Spigot论坛发帖,但我总是在等待中得到错误。我试过调度器,但没有运气。 代码:延迟8秒不工作?

Object obj = new Object(); 
      try { 
       synchronized (obj) { 
        while (true) { 
         for (Player player : Bukkit.getOnlinePlayers()) { 
          System.out.println("Hi"); 
          obj.wait(8000); 
         } 
        } 
       } 
      } catch (InterruptedException exception) { 
      } 

忽略Player播放器的事情什么都不做。 请帮忙。任何帮助表示赞赏。

+0

使用'Timer' ... – MadProgrammer

+5

你阅读'的文档wait'? – chrylis

+1

包含错误。我猜你发布的内容并不代表产生错误的原因。如果你只是想延迟使用Thread.sleep而不是 –

回答

1

wait()是一种旨在用于异步编程的方法,您可以让一大块代码在其他“需要时间”完成的情况下运行,从而不会阻止程序的整个执行。把它看作是一种让异步事件发生的机制。按照文档:

造成当前线程等待,直到其他线程调用 notify()方法或此对象的notifyAll的()方法。

sleep()是使当前线程片刻等待直到所需的时间已经过去,因此它会继续执行的方法:

的Thread.sleep导致当前线程暂停执行指定期间的 。

前者是异步编程,在那里你知道的东西将有可能阻止你的程序的同时执行有用的,你想要做其他的东西在那个时候,像连接到插座,大概都在同一线。后者是当你想在同一个线程上停止一段时间发生的一段时间。

如果你想要做的就是耽误您的方法执行什么,那么这将是要走的路:

try { 
    while (true) { 
     for (Player player : Bukkit.getOnlinePlayers()) { 
      System.out.println("Hi"); 
      Thread.sleep(8000); 
     } 
    } 
} catch (InterruptedException exception) { 
    // Catch something here 
} 
+0

这不是调度程序不工作... –