为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 Robot.delay(int ms) 限制为 1 分钟?

为什么 Robot.delay(int ms) 限制为 1 分钟?

婷婷同学_ 2023-08-09 17:17:30
我在执行软件时遇到以下异常:Exception in thread "main" java.lang.IllegalArgumentException: Delay must be to 0 to 60,000ms    at java.awt.Robot.checkDelayArgument(Robot.java:544)    at java.awt.Robot.delay(Robot.java:534)    at com.company.Main.main(Main.java:10)令我惊讶的是,有一个睡眠时间限制,并且标准库异常消息有错误的语法/拼写错误(to 0 to?)。检查该方法的源代码后delay(),我注意到它限制了等待时间,如异常所述:/** * Sleeps for the specified time. * To catch any <code>InterruptedException</code>s that occur, * <code>Thread.sleep()</code> may be used instead. * @param   ms      time to sleep in milliseconds * @throws  IllegalArgumentException if <code>ms</code> is not between 0 and 60,000 milliseconds inclusive * @see     java.lang.Thread#sleep */public synchronized void delay(int ms) {    checkDelayArgument(ms);    try {        Thread.sleep(ms);    } catch(InterruptedException ite) {        ite.printStackTrace();    }}private static final int MAX_DELAY = 60000;private void checkDelayArgument(int ms) {    if (ms < 0 || ms > MAX_DELAY) {        throw new IllegalArgumentException("Delay must be to 0 to 60,000ms");    }}为什么要这样做?这似乎是糟糕的 API 设计。InterruptedException除了为你捕获多余的检查异常并同步调用之外,它还有什么目的?
查看完整描述

1 回答

?
萧十郎

TA贡献1815条经验 获得超13个赞

除了原始开发人员之外,没有人可以回答这个问题。


你可以很清楚地看到它所做的只是 call Thread::sleep,所以只需做同样的事情即可。你不需要打电话Robot::delay。


以下是完全等价的,没有任意限制


Robot r;

long sleepDuration = 60001;

synchronized (r) {

    try {

        Thread.sleep(sleepDuration);

    } catch(InterruptedException ite) {

        ite.printStackTrace();

    }

}

API 设计似乎很糟糕

查看完整回答
反对 回复 2023-08-09
  • 1 回答
  • 0 关注
  • 135 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信