繁体   English   中英

Robot.delay(int)与Thread.sleep(long)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM