2017-10-29 268 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

這不是調度程序不工作... –