I have a program whose only purpose is to drive a java.awt.Robot
in an infinite loop until an exit condition is met.
The robot performs a number of actions in quick succession, which require a standard UI delay between them. For this, I use java.awt.Robot.setAutoDelay(int ms)
, which appears to be designed for precisely this purpose.
At other times, however, I need to insert arbitrarily long delays for operations to complete. I appear to have a choice between using java.awt.Robot.delay(int ms)
or java.lang.Thread.sleep(long ms)
, and am curious what the differences between them are, and which I should use.
My gut instinct was to keep all my operations in the same "place", and use java.awt.Robot.delay(int ms)
. 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.
At that point, I checked the API for java.awt.Robot.delay(int ms)
, which told me the following:
Sleeps for the specified time. To catch any
InterruptedException
s that occur,Thread.sleep()
may be used instead.
Having failed to gain any useful insight into the matter, I elected to ask you guys.
At first I would also assume that using delay()
would generate a large queue of events, in particular after reading the javadoc for waitForIdle()
:
Waits until all events currently on the event queue have been processed
but checking the source code of Robot.delay()
shows that it basically is a Thread.sleep()
, after checking that the delay time is positive and not more than 1 minute!
Abstract: both solutions are almost the same, use Thread.sleep()
for delaying longer than 1 minute or catching the InterruptedException.
after years of programming with Java I found how to sleep without having to catch the InterruptedException (disregarding the overhead of creating a Robot)