2017-05-07 127 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

相关问题