Java에서 고정 된 키를 시뮬레이션하십시오
문제
Java에서 키보드 키를 짧은 시간 동안 유지하는 동작을 시뮬레이션하려고합니다. 다음 코드는 5 초 동안 A 키를 유지할 것으로 예상하지만 한 번만 누릅니다 (메모장에서 테스트 할 때 단일 'A'를 생성). 다른 것을 사용해야하는지, 아니면 여기서 AWT.robot 클래스를 잘못 사용하는지에 대해 알고 있습니까?
Robot robot = null;
robot = new Robot();
robot.keyPress(KeyEvent.VK_A);
Thread.sleep(5000);
robot.keyRelease(KeyEvent.VK_A);
해결책
Thread.Sleep ()는 현재 스레드 (키를 유지하는 스레드)가 실행되는 것을 중지합니다.
주어진 시간 동안 키를 내려 놓기를 원한다면 평행 스레드에서 실행해야 할 수도 있습니다.
다음은 Thread.Sleep () 문제를 해결할 제안입니다 (명령 패턴을 사용하여 다른 명령을 만들고 마음대로 및 교체 할 수 있습니다).
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();
}
다른 팁
그냥 계속 누르?
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 );
}
}
}
에드워드가 제공 한 답변이 할 것이라고 생각합니다 !!
java.lang.robot에는 키 다운 이벤트가 없습니다. 나는 이것을 내 컴퓨터에서 시도했으며 (메모장 대신 Linux에서 콘솔에서 테스트) 작동하여 A 's를 생성했습니다. 아마도 이것은 메모장의 문제일까요?
제휴하지 않습니다 StackOverflow