我正在尝试创建一个直到按键运行的while循环。 我正在使用此代码:
while (System.in.available() == 0){
// do something
}
不幸的是,这不起作用。 它周围有什么办法吗?这可能是什么原因? 我应该提一下,在循环中我将东西打印到控制台,这可能是原因吗?
任何帮助将不胜感激,谢谢你的帮助。
答案 0 :(得分:0)
来自JavaDocs:
类InputStream的可用方法始终返回0.
由于System.in是一个InputStream,这可以解释你的问题。
答案 1 :(得分:0)
如果您希望循环不断运行,并在按任意键后立即停止,则您必须使用其他库(至少jline
和jcurses
存在)。使用标准方法,您必须按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();
}
}
}
答案 4 :(得分:-1)
另一种方法是按import javax.swing.*;
启用Swing并使用函数显示:variable = JOptionPane.showInputDialog()
。这将激活一个带有“确定”和“取消”按钮的窗口。这在我的程序中正常工作。