문제

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를 생성했습니다. 아마도 이것은 메모장의 문제일까요?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top