如何解决java.awt.Robot keyPress 在 macOS 下慢
macOS (Java SE 15.0.2) 下的键盘模拟性能与 Win10 有很大不同。键入“100 a”需要 Win10 (openJDK 9.0.4,14.0.2,15.0.2) 140ms,Ubuntu VM (openJDK 11.0.9.1) 8200ms 和 macOS 11000ms。 macOS Catalina VM 和 macOS BigSur 在 MacBook Pro 2020 上的结果相同。Ubuntu 测试需要 2300 毫秒,如果从控制台启动程序后直接将焦点设置为文本编辑器(对 macOS 没有影响)。
在每次 keyPress/keyRelease 后插入 robot.delay(30)
并没有在 macOS 上获得性能提升。有没有人可以证实这种行为?这似乎是 macOS 实现中的一个性能问题。
在 Win10 和 MacOS 上使用 javafx.scene.robot.Robot
时为 30 毫秒。
package JavaRobotTest;
import java.awt.*;
import java.awt.event.KeyEvent;
public class sample {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
for (Integer i = 0; i < 100; i++) {
sb.append('a');
}
typeText(sb.toString());
}
private static void typeText(String text) {
try {
// Win10 ~140ms,macOS ~11000ms
Robot robot = new Robot();
new Thread(() -> {
// Commenting this line result in Win10 ~15ms,macOS ~11000ms
robot.setAutoWaitForIdle(true);
typeTextRobot(robot,text);
}).start();
} catch (AWTException e) {
e.printStackTrace();
}
}
private static void typeTextRobot(Robot robot,String text) {
long start = System.currentTimeMillis();
for (char c : text.toCharArray()) {
Integer key = KeyEvent.VK_A;
try {
robot.keyPress(key);
//robot.delay(30);
robot.keyRelease(key);
//robot.delay(30);
} catch (Exception e) {
e.printStackTrace();
}
}
System.out.println("DURA ms: " + (System.currentTimeMillis() - start));
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。