Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中模拟按下的键_Java_Awt_Keypress_Keyevent - Fatal编程技术网

在Java中模拟按下的键

在Java中模拟按下的键,java,awt,keypress,keyevent,Java,Awt,Keypress,Keyevent,我希望在Java中模拟短时间按住键盘键的动作。我希望下面的代码按住A键5秒钟,但它只按了一次(在记事本中测试时生成一个“A”)。你知道我是否需要使用其他东西,或者我只是使用了awt.Robot类吗 Robot robot = null; robot = new Robot(); robot.keyPress(KeyEvent.VK_A); Thread.sleep(5000); robot.keyRelease(KeyEvent.VK_A); java.lang.Robot中没有按键关闭事件

我希望在Java中模拟短时间按住键盘键的动作。我希望下面的代码按住A键5秒钟,但它只按了一次(在记事本中测试时生成一个“A”)。你知道我是否需要使用其他东西,或者我只是使用了awt.Robot类吗

Robot robot = null; 
robot = new Robot();
robot.keyPress(KeyEvent.VK_A);
Thread.sleep(5000);
robot.keyRelease(KeyEvent.VK_A);

java.lang.Robot中没有按键关闭事件。我在我的电脑上试过(在linux下的控制台上测试,而不是用记事本),它成功了,产生了一系列的a。也许这只是记事本的一个问题?

Thread.sleep()停止当前线程(按住键的线程)的执行

如果你想让它按住键一段时间,也许你应该在一个并行线程中运行它

下面是一个解决Thread.sleep()问题的建议(使用命令模式,这样您就可以创建其他命令并随意将它们交换进来和交换出去):

继续按

import java.awt.Robot;
import java.awt.event.KeyEvent;

public class PressAndHold { 
    public static void main( String [] args ) throws Exception { 
        Robot robot = new Robot();
        for( int i = 0 ; i < 10; i++ ) {
            robot.keyPress( KeyEvent.VK_A );
        }
    }
}
导入java.awt.Robot;
导入java.awt.event.KeyEvent;
公共类按住{
公共静态void main(字符串[]args)引发异常{
机器人=新机器人();
对于(int i=0;i<10;i++){
robot.keyPress(KeyEvent.VK_A);
}
}
}

我想爱德华提供的答案就行了

你说得对。在线查看java文档时,会发现keyPress用于按键,keyRelease用于释放同一个键。我认为问题可能出在thread.sleep()上。
import java.awt.Robot;
import java.awt.event.KeyEvent;

public class PressAndHold { 
    public static void main( String [] args ) throws Exception { 
        Robot robot = new Robot();
        for( int i = 0 ; i < 10; i++ ) {
            robot.keyPress( KeyEvent.VK_A );
        }
    }
}