gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:40:53 24 4
gpt4 key购买 nike

我有一个程序,其唯一目的是在无限循环中驱动 java.awt.Robot,直到满足退出条件。

机器人会快速连续地执行一些 Action ,这需要在它们之间有一个标准的 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 的操作堆栈上放置一个操作来完成,如果这些是我唯一的无限循环中的延迟,我可能会很快且不必要地为机器人生成一个大得离谱的事件队列。

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

Sleeps for the specified time. To catch any InterruptedExceptions that occur, Thread.sleep() may be used instead.

由于未能对此事获得任何有用的见解,我选择问你们。

最佳答案

起初我还假设使用 delay() 会生成大量事件队列,特别是在阅读了 waitForIdle() 的 javadoc 之后:

Waits until all events currently on the event queue have been processed

但是查看Robot.delay()的源码发现它基本上是一个Thread.sleep(),在检查了延迟时间为正而不是超过1分钟!

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

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

关于java - Robot.delay(int) 与 Thread.sleep(long),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3198755/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com