有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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 InterruptedExceptions that occur, Thread.sleep() may be used instead.

由于没能对这件事有任何有用的见解,我决定问你们


共 (1) 个答案

  1. # 1 楼答案

    However, after thinking about it for a moment, I assumed that java.awt.Robot.delay(int ms) would put an operation on the Robot's stack of operations to complete, and if those were my only delays in an infinite loop, I may very quickly, and needlessly, generate an absurdly large queue of events for the Robot.

    你的恐惧是没有根据的。delay(int)方法完全按照javadoc所说的做。它会延迟调用线程,而不是在Robot实例的队列中插入“延迟这么长时间”事件