Java机器人不按Enter键应该如何

问题描述 投票:0回答:1

我正在尝试编程一个小型机器人,该机器人应该只写几个小时的相同短语,但要有延迟。

但是以某种方式,如果我在回车键之前同时没有1个字母,它会输入一个Pyramide。

例如,如果我想打印“ ted”,它将打印以下内容:

ted

tedted

tedtedted

tedtedtedted

[...]

(在金字塔线之间没有空线)

它真的很令人沮丧。

我尝试了许多解决方案,但没有一个有效。为机械手设置延迟,为Enter键添加额外的机械手,将其放入额外的线程中,或者在每次进行新的键入之前每次都创建新的机械手。它只是行不通。我究竟做错了什么?这是我尝试过的SSCCE:

@SuppressWarnings("CallToPrintStackTrace")
public class RobotTest {

private static Robot robo;
private static Robot okRobo;

static {
    createRobos();
}

private static void createRobos(){
    try {
        robo = new Robot();
        okRobo = new Robot();
    } catch (AWTException ex) {
        ex.printStackTrace();
    }
}

@SuppressWarnings({"CallToPrintStackTrace", "SleepWhileInLoop"})
public static void main(String[] args) throws InterruptedException {
    Thread.sleep(5000);
    for (int i = 0; i < 16; i++) {
        createRobos();
        perform();
//            Thread.sleep(500);
        performOk();
    }
}

private static void perform() {
    robo.keyPress(KeyEvent.VK_SHIFT);
    robo.keyPress(KeyEvent.VK_1);
    robo.keyRelease(KeyEvent.VK_SHIFT);
    robo.keyRelease(KeyEvent.VK_1);
    robo.keyPress(KeyEvent.VK_B);
    robo.keyRelease(KeyEvent.VK_B);
    robo.keyPress(KeyEvent.VK_O);
    robo.keyRelease(KeyEvent.VK_O);
    robo.keyPress(KeyEvent.VK_O);
    robo.keyRelease(KeyEvent.VK_O);
    robo.keyPress(KeyEvent.VK_S);
    robo.keyRelease(KeyEvent.VK_S);
    robo.keyPress(KeyEvent.VK_T);
    robo.keyRelease(KeyEvent.VK_T);
    robo.keyPress(KeyEvent.VK_E);
    robo.keyRelease(KeyEvent.VK_E);
    robo.keyPress(KeyEvent.VK_D);
    robo.keyRelease(KeyEvent.VK_D);
//        robo.waitForIdle();
}

private static void performOk() {
    okRobo.keyPress(KeyEvent.VK_ENTER);
    okRobo.keyRelease(KeyEvent.VK_ENTER);
//        okRobo.waitForIdle();
}

}

这是我的第一次尝试,在我看来也应该起作用,但是没有:

public class RobotTest {

private static Robot robo;
private static Robot okRobo;

@SuppressWarnings("CallToPrintStackTrace")
static {
    try {
        robo = new Robot();
        okRobo = new Robot();
    } catch (AWTException ex) {
        ex.printStackTrace();
    }
}

public static void main(String[] args) throws InterruptedException {
    Thread.sleep(5000);
    for (int i = 0; i < 16; i++) {
        perform();
    }
}

private static void perform() {
    robo.keyPress(KeyEvent.VK_SHIFT);
    robo.keyPress(KeyEvent.VK_1);
    robo.keyRelease(KeyEvent.VK_SHIFT);
    robo.keyRelease(KeyEvent.VK_1);
    robo.keyPress(KeyEvent.VK_B);
    robo.keyRelease(KeyEvent.VK_B);
    robo.keyPress(KeyEvent.VK_O);
    robo.keyRelease(KeyEvent.VK_O);
    robo.keyPress(KeyEvent.VK_O);
    robo.keyRelease(KeyEvent.VK_O);
    robo.keyPress(KeyEvent.VK_S);
    robo.keyRelease(KeyEvent.VK_S);
    robo.keyPress(KeyEvent.VK_T);
    robo.keyRelease(KeyEvent.VK_T);
    robo.keyPress(KeyEvent.VK_E);
    robo.keyRelease(KeyEvent.VK_E);
    robo.keyPress(KeyEvent.VK_D);
    robo.keyRelease(KeyEvent.VK_D);
    robo.keyPress(KeyEvent.VK_ENTER);
    robo.keyRelease(KeyEvent.VK_ENTER);
    robo.delay(500);
}
java robotframework enter
1个回答
0
投票
  1. 尝试在每次循环迭代时不要初始化您的机器人。在循环外调用createRobos()。那是除非您有特定的原因要这样做。
  2. 我认为您不需要两个单独的Robot实例才能使它正常工作。
  3. 代替使用Thread.sleep(),可以在delay()类中使用Robot方法。如果要在Robot方法调用之间添加延迟。

您可能会尝试在输入字母键与按下Enter键之间以及按下Enter键之间增加延迟。通常会有50-100 ms的延迟。有时候,事情变得有些混乱,尤其是当您将Thread.sleep()放入混音中时。

我通过这些小的更改运行了您的代码,它似乎运行良好。

© www.soinside.com 2019 - 2024. All rights reserved.