سؤال

أنا أتطلع إلى محاكاة عمل عقد مفتاح لوحة المفاتيح لأسفل لفترة قصيرة من الزمن في جافا. أتوقع أن يحمل التعليمات البرمجية التالية مفتاحا لمدة 5 ثوان، لكنه يضغط عليه مرة واحدة فقط (ينتج "a واحد"، عند الاختبار في المفكرة). أي فكرة إذا كنت بحاجة إلى استخدام شيء آخر، أو إذا كنت فقط باستخدام خطأ AWT.robot خطأ هنا؟

Robot robot = null; 
robot = new Robot();
robot.keyPress(KeyEvent.VK_A);
Thread.sleep(5000);
robot.keyRelease(KeyEvent.VK_A);
هل كانت مفيدة؟

المحلول

يقع Sleep.

إذا كنت تريد أن تحتفظ بالمفتاح لفترة زمنية معينة، فربما يجب تشغيله في مؤشر ترابط مواز.

فيما يلي اقتراح سيتحال حول المشكلة .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 );
        }
    }
}

أعتقد أن الإجابة المقدمة من إدوارد ستفعل!

لا يوجد حدث keydown في java.lang.robot. حاولت هذا على جهاز الكمبيوتر الخاص بي (اختبار على وحدة تحكم ضمن Linux بدلا من المفكرة) وعملت، وإنتاج سلسلة من A. ربما هذه مجرد مشكلة مع المفكرة؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top