Frage

Ich möchte die Wirkung des Tastaturschlüssels für kurze Zeit in Java simulieren. Ich würde erwarten, dass der folgende Code die A -Taste für 5 Sekunden lang festhält, aber er drückt ihn nur einmal (erzeugt ein einzelnes "A" beim Testen in Notepad). Irgendeine Idee, wenn ich etwas anderes verwenden muss oder ob ich nur die AWT.Robot -Klasse hier falsch benutze?

Robot robot = null; 
robot = new Robot();
robot.keyPress(KeyEvent.VK_A);
Thread.sleep(5000);
robot.keyRelease(KeyEvent.VK_A);
War es hilfreich?

Lösung

Thread.sleep () veraltet den aktuellen Thread (der Thread, der die Taste gedrückt hält) auszuführen.

Wenn Sie möchten, dass er den Schlüssel für eine bestimmte Zeit abnimmt, sollten Sie ihn möglicherweise in einem parallelen Thread ausführen.

Hier ist ein Vorschlag, der sich um den Thread umgeht.

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();
}

Andere Tipps

Drücken Sie einfach weiter?

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 );
        }
    }
}

Ich denke, die Antwort von Edward wird es tun !!

In java.lang.robot gibt es kein Keydown -Ereignis. Ich habe dies auf meinem Computer ausprobiert (Testen auf einer Konsole unter Linux statt mit Notepad) und es funktionierte eine Reihe von A. Vielleicht ist dies nur ein Problem mit Notepad?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top