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

Maa*_*arx 5 java multithreading sleep delay awtrobot

我有一个程序,其唯一目的是在无限循环中驱动 ajava.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)将在机器人的操作堆栈上完成一个操作,如果这些是我在无限循环中唯一的延迟,我可能会非常快地、不必要地生成一个大得荒谬的结果。机器人的事件队列。

那时,我检查了APIjava.awt.Robot.delay(int ms),它告诉我以下内容:

休眠指定的时间。要捕获InterruptedException发生的任何 s,Thread.sleep()可以改为使用。

由于未能对此事获得任何有用的见解,我决定向你们询问。

use*_*421 3

首先,我还假设 usingdelay()会生成一个大的事件队列,特别是在阅读了以下 javadoc 之后waitForIdle()

等待直到事件队列中当前的所有事件均已处理完毕

但是查看源码Robot.delay()发现它基本上就是一个Thread.sleep(),经过检查延迟时间是正数且不超过1分钟!

摘要:两种解决方案几乎相同,用于Thread.sleep()延迟超过 1 分钟或捕获 InterruptedException。

经过多年的 Java 编程,我发现了如何在不捕获 InterruptedException 的情况下睡觉(不考虑创建机器人的开销)