Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android TimerTask中与延迟参数相关的奇怪IllegalArgumentException_Java_Android_Timertask - Fatal编程技术网

Java Android TimerTask中与延迟参数相关的奇怪IllegalArgumentException

Java Android TimerTask中与延迟参数相关的奇怪IllegalArgumentException,java,android,timertask,Java,Android,Timertask,第行“有时”以某种方式引发以下异常: myTimer.scheduleAtFixedRate(timerTaskForListChecker, 0L, timerInterval*1000); 如您所见,我的延迟参数中有“0”(稍后我尝试将其更改为0L,但它也不起作用) 它如何将值“0”视为“-1543808998843” 更新1: 我有下面的一行,我从不改变timeInterval变量 Caused by: java.lang.IllegalArgumentException: Illega

第行“有时”以某种方式引发以下异常:

myTimer.scheduleAtFixedRate(timerTaskForListChecker, 0L, timerInterval*1000);
如您所见,我的延迟参数中有“0”(稍后我尝试将其更改为0L,但它也不起作用)

它如何将值“0”视为“-1543808998843”

更新1:

我有下面的一行,我从不改变timeInterval变量

Caused by: java.lang.IllegalArgumentException: Illegal delay to start the TimerTask: -1543808998843
    at java.util.Timer.scheduleImpl(Timer.java:567)
    at java.util.Timer.scheduleAtFixedRate(Timer.java:528)
    ...
更新2: 我发现,生成此异常的系统也会为以下行返回一个负数(溢出?):

private int timerInterval = 3 * 60;

它能与定制的安卓操作系统相关吗?(按公司-设备特定-出厂默认值)

问题最有可能是
period
参数错误。在这种情况下,最有可能导致意外负数的原因是整数溢出

我猜你已经声明了
timerInterval
int
,并且“有时”你试图延迟几百万秒


您可以说,在某些平台上,这会返回一个负数:

(int)((double)System.currentTimeMillis()/1000L)
真奇怪!这要么是Android到该平台的端口中的错误,要么是系统时钟被设置为不正确的值

currentTimeMillis
值应该是自1970年1月1日以来的毫秒数。。。作为64位有符号值。我不明白如何从上面的表达式中得到负数,除非
currentTimeMillis()
返回一个伪值负值

可能相关:


    • 我知道这是一个老问题,但万一有人有类似的问题


      我遇到了完全相同的问题,我意识到设备上的日期不知何故被重置为1920年。将其更改回解决了问题。

      我现在检查了它,我只有这一行:“private int timerInterval=3*60;”并且我从不在任何地方更改它。我建议您修改代码,以便在引发异常时打印出参数的实际值。。。问题是我没有得到这个异常,但是“一些”用户得到了它。我从远程异常日志中看到这些。请参阅我问题中的更新-2;我试着将Android 4.0.3平板电脑的日期设置为1970年(同一台设备,其中一位用户有此异常),因此我可以重新创建此异常,但我无法。它生成有效值。我没有主意了:/
          (int)((double)System.currentTimeMillis()/1000L)