Java停止程序执行,直到用户在命令提示符下输入任何输入

时间:2018-01-07 11:11:01

标签: java command-prompt

我正在制作一个严格的命令提示程序,在某些时候我想让它的执行暂停,直到用户按下键盘上的键(无论哪个)。

到目前为止,我试过这个:

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'恢复执行,但我宁愿让任何输入做到这一点。

编辑:更具体地说,我希望程序能够在任何按下的键上立即恢复,而不会让用户看到他作为输入提供的内容。

2 个答案:

答案 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不支持)。这里有几个解决方法:

How to disable console echoing

http://www.jguru.com/faq/view.jsp?EID=23448