java机器人。延迟(int)与线程。睡眠(长)
我有一个程序,它的唯一目的是在无限循环中驱动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)
会在机器人的操作堆栈上放置一个操作来完成,如果这些是无限循环中我唯一的延迟,我可能会非常快地,而且不必要地,为机器人生成一个大得离谱的事件队列
在这一点上,我检查了the API for ^{
Sleeps for the specified time. To catch any
InterruptedException
s that occur,Thread.sleep()
may be used instead.
由于没能对这件事有任何有用的见解,我决定问你们
# 1 楼答案
你的恐惧是没有根据的。
delay(int)
方法完全按照javadoc所说的做。它会延迟调用线程,而不是在Robot实例的队列中插入“延迟这么长时间”事件