Question

Je cherche à simuler l'action de la tenue d'une touche du clavier vers le bas pendant une courte période de temps en Java. Je me attends le code suivant à maintenir enfoncée la touche A pendant 5 secondes, mais il appuie sur une seule fois (un seul produit « a », lors du test dans le Bloc-notes). Toute idée si je besoin d'utiliser quelque chose d'autre, ou si je suis juste en utilisant la classe awt.Robot mal ici?

Robot robot = null; 
robot = new Robot();
robot.keyPress(KeyEvent.VK_A);
Thread.sleep(5000);
robot.keyRelease(KeyEvent.VK_A);
Était-ce utile?

La solution

Thread.sleep () arrête le fil courant (le fil qui est maintenant enfoncée la touche) à partir de l'exécution.

Si vous voulez maintenir la touche vers le bas pour une quantité donnée de temps, peut-être vous devriez l'exécuter dans un thread parallèle.

Voici une suggestion qui contourner le Thread.sleep () (et utilise le modèle de commande de sorte que vous pouvez créer d'autres commandes et de les échanger et sortir à volonté):

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

Autres conseils

Il suffit de maintenir la touche?

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

Je pense que la réponse fournie par edward fera !!

Il n'y a aucun événement keyDown à java.lang.Robot. J'ai essayé sur mon ordinateur (test sur une console sous Linux au lieu de avec le bloc-notes) et cela a fonctionné, produisant une chaîne d'un de. Peut-être est juste un problème avec notepad?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top