如何使用按键正确结束while循环?

时间:2016-03-22 12:28:11

标签: java loops keypress

我正在尝试创建一个直到按键运行的while循环。 我正在使用此代码:

while (System.in.available() == 0){
            // do something
    }

不幸的是,这不起作用。 它周围有什么办法吗?这可能是什么原因? 我应该提一下,在循环中我将东西打印到控制台,这可能是原因吗?

任何帮助将不胜感激,谢谢你的帮助。

5 个答案:

答案 0 :(得分:0)

来自JavaDocs:

类InputStream的可用方法始终返回0.

由于System.in是一个InputStream,这可以解释你的问题。

答案 1 :(得分:0)

如果您希望循环不断运行,并在按任意键后立即停止,则您必须使用其他库(至少jlinejcurses存在)。使用标准方法,您必须按Enter键以刷新缓冲区,并且它不会像您可能想要的那样顺利运行。

此外,您永远不需要使用available()(并且它不会做您希望的事情)。

答案 2 :(得分:0)

好的,对于控制台应用程序,您是否尝试过System.in.read()?这是指示示例的链接:http://www.java2s.com/Code/JavaAPI/java.lang/Systeminread.htm

我将在下面给出后代和其他正在寻找具有UI的应用程序类似答案的人的答案。 您将要使用KeyListener捕获按下的键事件。这是一个如何实现它的例子。 http://docs.oracle.com/javase/tutorial/uiswing/events/keylistener.html

然后,您可以循环并查看按键发生时设置的标志。您可能希望在循环期间短暂睡眠(250或500毫秒),或者您将创建一个能够非常快速地吸收所有计算周期的循环。

答案 3 :(得分:-1)

public class Test {

    public static void main(String[] args) throws InterruptedException {
        Thread a = new Thread() {
            @Override
            public void run() {
                try {
                    while (true) {
                        System.out.println("A loop");
                        sleep(2000);
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        };

        try {
            a.start();
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            br.readLine();
            a.stop();
            a.join();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
  1. 在线程中创建一个主循环来做你的事业(在这里,我打印出来:"一个循环"
  2. 启动该帖子
  3. 等待来自控制台的密钥
  4. 终止线程 正如我所看到的,你并不需要键盘上的一次点击来终止循环,所以,点击一个键然后输入

答案 4 :(得分:-1)

另一种方法是按import javax.swing.*;启用Swing并使用函数显示:variable = JOptionPane.showInputDialog()。这将激活一个带有“确定”和“取消”按钮的窗口。这在我的程序中正常工作。