[英]Robot.delay(int) versus Thread.sleep(long)
我有一个程序,其唯一目的是在无限循环中驱动java.awt.Robot
,直到满足退出条件。
机器人快速连续执行许多操作,这需要它们之间的标准UI延迟。 为此,我使用java.awt.Robot.setAutoDelay(int ms)
,它似乎是为了这个目的而设计的。
但是,在其他时候,我需要插入任意长的延迟来完成操作。 我似乎可以选择使用java.awt.Robot.delay(int ms)
还是java.lang.Thread.sleep(long ms)
,我很好奇它们之间的区别是什么,我应该使用哪些。
我的直觉是将我的所有操作保持在同一个“地方”,并使用java.awt.Robot.delay(int ms)
。 然而,在考虑了一下之后,我假设java.awt.Robot.delay(int ms)
会在Robot的操作堆栈上放置一个操作来完成,如果那些是我在无限循环中的唯一延迟,我可能非常快,并且不必要地为机器人生成一个荒谬的大型事件队列。
那时,我检查了java.awt.Robot.delay(int ms)
的API ,它告诉我以下内容:
睡觉指定的时间。 要捕获发生的任何
InterruptedException
,可以使用Thread.sleep()
代替。
由于没有获得任何有用的洞察力,我选择问你们。
起初我还假设使用delay()
会生成一个大的事件队列,特别是在读取waitForIdle()
的javadoc之后:
等待,直到处理了当前在事件队列上的所有事件
但检查Robot.delay()
的源代码后,显示它基本上是一个Thread.sleep()
,在检查延迟时间为正且不超过1分钟后!
摘要:两个解决方案几乎相同,使用Thread.sleep()
延迟超过1分钟或捕获InterruptedException。
经过多年的Java编程后,我发现了如何在不必捕获InterruptedException的情况下进行睡眠(忽略创建Robot的开销)
然而,在考虑了一下之后,我假设java.awt.Robot.delay(int ms)会在Robot的操作堆栈上放置一个操作来完成,如果那些是我在无限循环中的唯一延迟,我可能非常快,并且不必要地为机器人生成一个荒谬的大型事件队列。
你的恐惧是没有根据的。 delay(int)
方法正如javadoc所说的那样。 它会延迟调用线程,而不是将“延迟这么长”的事件插入到Robot实例的队列中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.