我正在制作一个严格的命令提示程序,在某些时候我想让它的执行暂停,直到用户按下键盘上的键(无论哪个)。
到目前为止,我试过这个:
char cont =sc.next().charAt(0);
while(cont !=' ') {
try{
Thread.currentThread().sleep(1);
} catch(Exception e) {
System.out.println(e);
}
cont = sc.next().charAt(0);
}
在这种情况下,我想要' space'恢复执行,但我宁愿让任何输入做到这一点。
编辑:更具体地说,我希望程序能够在任何按下的键上立即恢复,而不会让用户看到他作为输入提供的内容。
答案 0 :(得分:0)
首先,您不需要执行Thread.currentThread().sleep(1);
来暂停Thread的流程。因为它在程序等待直到用户引入输入时自动暂停。
不使用char变量,而是使用String one(它更易于与scanner类一起使用)并删除
try{
Thread.currentThread().sleep(1);
} catch(Exception e) {
System.out.println(e);
}
因为没有必要。这是它为我工作的代码:
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String cont = input.nextLine();
while(!cont.equals(" ")) {
cont = input.nextLine();
}
}
其他解决方案(虽然复杂得多)将是创建一个Frame并向其添加一个KeyListener(当按下空格键时,用户将看不到任何内容,程序将立即执行)。
class frame extends JFrame{
frame(){
addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
if(e.getExtendedKeyCode() == KeyEvent.VK_SPACE){
//insert here the code you'd like to be executed when the user introduces a spacebar
}
}
@Override
public void keyReleased(KeyEvent e) {
}
});
setVisible(true);
}
}
答案 1 :(得分:0)
在你的代码中,你不需要任何睡眠调用 - 输入是阻塞的,这就足够了。但禁用输入字符的回显很棘手(Java不支持)。这里有几个解决方法: