小编典典

Java会忽略机器人生成的VK_Enter事件

java

我正在使用机器人编写一些集成测试。我让机器人打开了一个菜单,它应该从菜单中选择一个选项。除了回车键似乎被忽略。菜单将打开并选择了正确的菜单项,但是如果我按Enter键,则没有采取任何措施。如果我手动按适当的键,它可以完成预期的工作。如果我在非Java应用程序上运行机器人,则其他应用程序将正确响应enter事件。因此,我已经验证我可以正确发送Enter事件,并且Java菜单应该对此做出响应;但有些东西不起作用。

我也尝试过用空格事件替换enter事件(菜单也应该响应),也没有响应。

我正在使用最新的Sun JDK在Redhat
Linux上运行。我很确定这不是我的代码的明显问题,因为我发现这篇文章描述了遇到完全相同的问题的人,但是它没有解决方案:http : //www.velocityreviews.com/forums/t666100- robot-and-
awt-on-linux.html

private void requestTest(String testName){
    if(testName==currentTest)
        return;
    //overwrite config file with new data
    currentTest=testName;
    overwriteFile(configFile, getCurrentConfigFile());

    //close current graph
    pressKeyCombo(KeyEvent.VK_CONTROL, KeyEvent.VK_F4);

    //open File menu
    pressKeyCombo(KeyEvent.VK_ALT, KeyEvent.VK_F);
    //select the 'load defaults' option
    pressKey(KeyEvent.VK_DOWN);
    pressKey(KeyEvent.VK_DOWN);
    pressKey(KeyEvent.VK_DOWN);
    pressKey(KeyEvent.VK_SPACE);
}

阅读 226

收藏
2020-11-23

共1个答案

小编典典

我终于解决了这个问题。我让我的机器人代码与按钮效果一起在事件分发线程中运行。这意味着在我的机器人完成执行之前,所有按钮都无法响应我的机器人的动作。

我不完全确定为什么在这种情况下会阻止我的机器人正常工作。我发现,如果删除了ctrl-F4命令,机器人将对enter命令做出响应,但是似乎在机器人返回时,这两个命令都应该已经排队并正确执行了。我认为排队的事件数没有限制,或者我以某种方式最终在两个事件之间进行了数据争夺。无论哪种方式,通过将机器人移动到单独的线程中,我都能获得所需的行为。

顺便说一句,我无法创建SSCCE的原因是因为我试图将机器人合并到按钮中,并且试图让机器人一次执行多个事件。但我没有尝试按下按钮来生成执行多个事件的机器人。要重现此问题,我最终会得到与原始代码一样复杂的代码。

2020-11-23