Reputation: 3739
I'm looking to simulate the action of holding a keyboard key down for a short period of time in Java. I would expect the following code to hold down the A key for 5 seconds, but it only presses it once (produces a single 'a', when testing in Notepad). Any idea if I need to use something else, or if I'm just using the awt.Robot class wrong here?
Robot robot = null;
robot = new Robot();
robot.keyPress(KeyEvent.VK_A);
Thread.sleep(5000);
robot.keyRelease(KeyEvent.VK_A);
Upvotes: 4
Views: 15041
Reputation: 2044
Thread.sleep() stops the current thread (the thread that is holding down the key) from executing.
If you want it to hold the key down for a given amount of time, maybe you should run it in a parallel Thread.
Here is a suggestion that will get around the Thread.sleep() issue (uses the command pattern so you can create other commands and swap them in and out at will):
public class Main {
public static void main(String[] args) throws InterruptedException {
final RobotCommand pressAKeyCommand = new PressAKeyCommand();
Thread t = new Thread(new Runnable() {
public void run() {
pressAKeyCommand.execute();
}
});
t.start();
Thread.sleep(5000);
pressAKeyCommand.stop();
}
}
class PressAKeyCommand implements RobotCommand {
private volatile boolean isContinue = true;
public void execute() {
try {
Robot robot = new Robot();
while (isContinue) {
robot.keyPress(KeyEvent.VK_A);
}
robot.keyRelease(KeyEvent.VK_A);
} catch (AWTException ex) {
// Do something with Exception
}
}
public void stop() {
isContinue = false;
}
}
interface RobotCommand {
void execute();
void stop();
}
Upvotes: 5
Reputation: 199234
Just keep pressing?
import java.awt.Robot;
import java.awt.event.KeyEvent;
public class PressAndHold {
public static void main( String [] args ) throws Exception {
Robot robot = new Robot();
for( int i = 0 ; i < 10; i++ ) {
robot.keyPress( KeyEvent.VK_A );
}
}
}
I think the answer provided by edward will do!!
Upvotes: 3
Reputation: 4089
There is no keyDown event in java.lang.Robot. I tried this on my computer (testing on a console under linux instead of with notepad) and it worked, producing a string of a's. Perhaps this is just a problem with NotePad?
Upvotes: 0