2017-05-07 130 views
0
Runnable runPickWinner = new Runnable() { 
     @Override 
     public void run() { 
      mPot.pickWinner(); 
     } 
    }; 
ScheduledExecutorService execPickWinner = Executors.newScheduledThreadPool(1); 
execPickWinner.scheduleAtFixedRate(runPickWinner, runPickWinnerTime.longValue(), runPickWinnerTime.longValue(), TimeUnit.MINUTES); 

我收到以下錯誤:拋出:IllegalArgumentException上scheduleAtFixedRate方法

java.lang.IllegalArgumentException 
    at java.util.concurrent.ScheduledThreadPoolExecutor.scheduleAtFixedRate(Unknown Source) ~[?:1.8.0_131] 
    at com.tchristofferson.Lottery.runLottery(Lottery.java:223) ~[?:?] 
    at com.tchristofferson.Lottery.onEnable(Lottery.java:50) ~[?:?] 
    at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:271) ~[craftbukkit.jar:git-Bukkit-c19c293] 
    at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:329) [craftbukkit.jar:git-Bukkit-c19c293] 
    at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:404) [craftbukkit.jar:git-Bukkit-c19c293] 
    at org.bukkit.craftbukkit.v1_11_R1.CraftServer.enablePlugin(CraftServer.java:361) [craftbukkit.jar:git-Bukkit-c19c293] 
    at org.bukkit.craftbukkit.v1_11_R1.CraftServer.enablePlugins(CraftServer.java:323) [craftbukkit.jar:git-Bukkit-c19c293] 
    at net.minecraft.server.v1_11_R1.MinecraftServer.t(MinecraftServer.java:411) [craftbukkit.jar:git-Bukkit-c19c293] 
    at net.minecraft.server.v1_11_R1.MinecraftServer.l(MinecraftServer.java:372) [craftbukkit.jar:git-Bukkit-c19c293] 
    at net.minecraft.server.v1_11_R1.MinecraftServer.a(MinecraftServer.java:327) [craftbukkit.jar:git-Bukkit-c19c293] 
    at net.minecraft.server.v1_11_R1.DedicatedServer.init(DedicatedServer.java:244) [craftbukkit.jar:git-Bukkit-c19c293] 
    at net.minecraft.server.v1_11_R1.MinecraftServer.run(MinecraftServer.java:521) [craftbukkit.jar:git-Bukkit-c19c293] 
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_131] 

這似乎是在scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)一個錯誤,但它是沒有意義的,他們是整數類型的,後來我打電話longValue()這應該會讓他們變得很長。我只有通過硬編碼的價值,例如,如果我使用10L或只有10它工作,但這不會。

+0

給出了一個非常簡短的回答,說這是固定的,但它在答案審查隊列中被刪除。 OP,如果你能提供一個擴展的答案,那將是理想的,否則就會失敗。謝謝! – halfer

回答

2

退房的方法的Java實現,你使用的是IE ScheduledThreadPoolExecutor.scheduleAtFixedRate

public ScheduledFuture<?> scheduleAtFixedRate(Runnable command, 
                long initialDelay, 
                long period, 
                TimeUnit unit) { 
     if (command == null || unit == null) 
      throw new NullPointerException(); 
     if (period <= 0) 
      throw new IllegalArgumentException(); 
     RunnableScheduledFuture<?> t = decorateTask(command, 
      new ScheduledFutureTask<Object>(command, 
              null, 
              triggerTime(initialDelay, unit), 
              unit.toNanos(period))); 
     delayedExecute(t); 
     return t; 
    } 

異常IllegalArgumentException是當period <= 0,所以基本上你逝去的runPickWinnerTime.longValue()小於0,也就是你的第三個參數的方法是拋出小於0的時候應該不是。

當你硬編碼,那麼你硬編碼正確的值,但是當你使用runPickWinnerTime.longValue()那麼它是不是,所以你需要創建runPickWinnerTime大於0,你應該使用不同的對象爲您initialDelayperiod,我看到你正在使用相同的,這是你意想不到的問題。

+0

當你說我應該爲period和initialDelay使用不同的對象時,你是什麼意思?我不應該用很長時間? – tchristofferson

+0

我從來沒有說過你不應該用很長的時間,但是如果你想爲初始延遲和句點(第二個和第三個參數)傳遞不同的值,那麼你將如何使用同一個變量'runPickWinnerTime'來做這件事,我想這就是發生在你的案件中,不小心你也經歷了0時期。 – hagrawal

相關問題