您的位置:首页 > 编程语言 > Java开发

java.lang.IllegalArgumentException: n must be positive

2015-05-25 11:12 771 查看
publicstaticStringrandomKey(){ Randomrandom=newRandom(); intkey=random.nextInt(((int)System.currentTimeMillis())); returnString.valueOf(key); }  直接调用方法,发生异常:
Exceptioninthread"main"java.lang.IllegalArgumentException:nmustbepositive
atjava.util.Random.nextInt(Random.java:300)
atcom.stresstest.example.RandomTest.randomKey(RandomTest.java:24)
atcom.stresstest.example.RandomTest.main(RandomTest.java:15)
异常说明:
java.lang.IllegalArgumentException:nmustbepositive
参数异常,n必须是一个整数,显然(int)System.currentTimeMillis()产生的值不是一个正数。

分析:
  系统产生的异常,测试时系统正常,上线之后某一天之后产生了异常。
查看System.currentTimeMillis()产生了问题,产生异常时间是2015-05-23当天开始往后,一直报错。之前就没事

时间:2015-05-23
测试结果:正常

System.currentTimeMillis():1432350368523
(int)System.currentTimeMillis():2126349176
randomKey():1369912950

时间:2015-05-24 测试结果:1432436706512
-2082194224
Exceptioninthread"main"java.lang.IllegalArgumentException:nmustbepositive atjava.util.Random.nextInt(Random.java:300) atcom.stresstest.example.RandomTest.randomKey(RandomTest.java:24) atcom.stresstest.example.RandomTest.main(RandomTest.java:15)

  因此可以知道结果,阴性问题,值得注意,至于long型转换为int型出现问题在这里不做深究,有这个问题深层研究的请补充。解决办法:intkey=random.nextInt(((int)System.currentTimeMillis())); 修改为:   1.random.nextInt(((int)System.currentTimeMillis()/1000));   2.random.nextInt(999999999);


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐