我有一个程序,其唯一目的是驱动java.awt.Robot
无限循环,直到满足退出条件。
机器人快速连续执行多个动作,这需要它们之间有标准的 UI 延迟。为此,我使用java.awt.Robot.setAutoDelay(int ms)
,这似乎正是为了这个目的而设计的。
然而,在其他时候,我需要插入任意长的延迟才能完成操作。我似乎可以选择使用java.awt.Robot.delay(int ms)
or java.lang.Thread.sleep(long ms)
,并且很好奇它们之间有什么区别,以及我应该使用哪个。
我的直觉是将所有操作保持在同一个“地方”,并使用java.awt.Robot.delay(int ms)
。然而,思考片刻后,我认为java.awt.Robot.delay(int ms)
会将一个操作放在机器人的操作堆栈上来完成,如果这些是我在无限循环中唯一的延迟,我可能会非常快速且不必要地为机器人生成一个荒谬的大事件队列。
那时,我检查了API 用于java.awt.Robot.delay(int ms) http://download.oracle.com/javase/6/docs/api/java/awt/Robot.html#delay%28int%29,它告诉我以下内容:
休眠指定的时间。抓住任何InterruptedException
发生的情况,Thread.sleep()
可以用它来代替。
由于未能对此事获得任何有用的见解,我决定向你们询问。
起初我还假设使用delay()
会生成一个大的事件队列,特别是在阅读了 javadoc 后waitForIdle()
:
等待直到事件队列中当前的所有事件均已处理完毕
但检查了源代码Robot.delay()
表明它基本上是一个Thread.sleep()
,经检查延迟时间为正且不超过1分钟!
摘要:两种解决方案几乎相同,使用Thread.sleep()
延迟超过 1 分钟或捕获 InterruptedException。
经过多年的 Java 编程,我发现了如何在不捕获 InterruptedException 的情况下睡觉(不考虑创建机器人的开销)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)