我正在尝试用下面的代码模拟击键。当我打开记事本时,它工作得很好,但当我打开我想要使用它的游戏时,它什么也不做。所以按键似乎不起作用。我试着模拟鼠标移动和点击,这些动作确实起作用了。有人知道如何解决这个问题吗?
我找到了这个问题,How can I use java.awt.Robot inside games?,但我不能添加评论或任何东西。
package MyProject;
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;
public class KeyStroke {
public static void main(String[] args) throws AWTException {
Robot robot = new Robot();
robot.delay(3000);
robot.keyPress(KeyEvent.VK_Q);
robot.keyPress(KeyEvent.VK_W);
robot.keyPress(KeyEvent.VK_E);
robot.keyPress(KeyEvent.VK_R);
robot.keyPress(KeyEvent.VK_T);
robot.keyPress(KeyEvent.VK_Y);
}
}
发布于 2014-09-18 17:52:42
您可能希望按下并释放这些键来模拟击键,即当前代码将按住Q、W、E、R、T和Y,直到触发释放。此外,您可能希望在一小段时间内按住它们,因为当我这样做时,这会给我带来一些问题。
代码
package MyProject;
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;
public class KeyStroke {
private static Robot robot;
public static void main(String[] args) throws AWTException {
robot = new Robot();
robot.delay(3000);
keystroke(KeyEvent.VK_Q);
keystroke(KeyEvent.VK_W);
keystroke(KeyEvent.VK_E);
keystroke(KeyEvent.VK_R);
keystroke(KeyEvent.VK_T);
keystroke(KeyEvent.VK_Y);
}
private static void keystroke(int key) {
robot.keyPress(key);
robot.delay(100); // hold for a tenth of a second, adjustable
robot.keyRelease(key);
}
}
发布于 2018-08-28 04:40:21
每当人们遇到java.awt.Robot
方法没有在程序中注册的问题时,最有可能的原因是这些方法没有释放按键/鼠标击键,或者在按下/释放之间没有延迟。这同样适用于鼠标点击和击键。
有两件事需要检查-
robot.keyPress(key)
,请确保在某个时候使用robot.keyRelease(key)
。Press
和Release
之间有足够大的延迟。经验法则100 ms
示例
不正确
robot.keyPress(key); // without a keyRelease
robot.keyPress(key);
robot.keyRelease(key); // no delay
对,是这样
robot.keyPress(key);
Thread.sleep(100) // or robot.delay(100);
robot.keyRelease(key);
发布于 2014-09-18 18:20:07
与上面相反-你在哪里添加你的关键监听器?
public class BetaTest {
public static void main (String[] args){
new BetaTest().startUp();
}
private void startUp() {
final JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.pack();
frame.setVisible(true);
final KeyAdapter ka = new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
super.keyPressed(e);
System.out.println("key pressed");
}
};
frame.addKeyListener(ka);
Runnable r = new Runnable() {
@Override
public void run() {
try {
Thread.sleep(1000);
KeyEvent ke = new KeyEvent(frame, KeyEvent.KEY_PRESSED, System.currentTimeMillis(), 0, KeyEvent.VK_A, 'a');
ka.keyPressed(ke);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
Thread t = new Thread(r);
t.setDaemon(true);
t.start();
}
}
输出是令人惊讶的
key pressed
https://stackoverflow.com/questions/25909039
复制相似问题