【发布时间】:2020-11-28 15:12:46
【问题描述】:
我正在尝试用 Java 编写一个程序,该程序使用 Robot 类自动键入字符串中的每个字符。不久前,我用它制作了一个类似的自动化程序(我将其称为“以前的项目”),它使用了“keyPress()”。这个以及我需要使用的 Robot 类的大多数(如果不是全部)其他方法都运行良好。
现在我已经开始了,'keyPress()' 没有输入任何内容,无论我作为参数传递的 KeyEvent 是什么。我以为我写错了代码,所以我运行了我之前的项目以确保它可以正常工作,但它没有。
这是我在上一个项目和当前项目中使用的代码的 sn-p(您也可以使用它来测试它)。
编辑:尝试使用文本编辑器或任何功能类似于文本字段的工具。我现在展示了整个演示类。
// demo procedure
public class DemoClass() {
public static void main(String[] args) {
new DemoClass().run()
}
public void run() {
try {
Robot robot = new Robot();
for (int i = 1; i <= 30; i++) {
robot.keyPress(KeyEvent.VK_A);
robot.delay(100);
System.out.println("Typed key");
}
} catch (AWTException e) {
e.printStackTrace();
}
}
}
“键入的密钥”被打印 30 次,输出中也没有出现错误。
我试过了;
- 在按键后添加“robot.keyRelease(KeyEvent.VK_A)”,
- 允许我想要自动化的软件中的程序类型,
- 允许程序在我正在使用的 IDE 和文本编辑器中输入,
- 允许程序在 IDE 和文本编辑器中单击(这样我可以查看是否只有按键才是问题所在)。
这些都没有产生结果。我检查了来自多个来源(文章和视频)的代码,所有这些都具有相同的代码存根。我读过一些软件会阻止机器人对象在其中输入/单击,但在我开发之前的项目时,输入和单击都有效。
【问题讨论】:
-
按键事件只传递给有焦点的组件。我们没有关于如何实际使用该代码的上下文。发布适当的minimal reproducible example 来演示问题。 但在我开发之前的项目时,打字和点击都有效。 - 然后回到你之前的项目,看看你做了什么不同的事情。
-
感谢您的反馈。我有任何我想输入的焦点(我将添加到帖子中)。就像我说的,这与我之前的项目中使用的相同代码 sn-p 以前可以工作但现在不能工作。从那以后,我也没有改变项目中的任何内容。
-
@GreatPanda3 我刚刚试过你的代码,它运行得很好
-
@UmerFarooq 真的吗?您是否准确复制了代码?您是让程序在特定类型的文本字段中编写还是仅在标准文本编辑器中编写?如果您执行了上述所有操作,我不确定为什么它对我不起作用。
-
@GreatPanda3 是的,我复制了您提供的确切代码。我让程序在 IDE 和记事本中输入,它工作了(输入了 'a' 的序列)