我想知道Java中是否有一个选项允许你暂停程序直到任何按键被按下。 这是我的代码的一部分,最终它是另一个类中while循环的一部分。
public void menu()
{
boolean exit = false;
System.out.println("-- Command interpreter --");
System.out.println("[1] Write results to console");
System.out.println("[2] Write results to text file");
System.out.println("[3] exit");
System.out.println("-------------------------");
System.out.print("Input Value: ");
String s = scaner.nextLine();
int i = Integer.parseInt(s);
switch (i)
{
case 1:
{
writeToScr(listPopulation);
System.out.println("\n\nPress any key to continue..");
scaner.next();
break;
}
case 2:
{
writeToFile(listPopulation);
System.out.println("\n\nPress any key to continue..");
scaner.next();
break;
}
case 3:
{
exit = true;
break;
}
default:
{
System.out.println("Unknown Entry.");
break;
}
}
if (exit)
{
System.out.println("Exit!");
return;
}
}
所以我想要完成的是,例如在案例1中,当我将结果写入控制台时,我希望程序暂停并让我检查我有什么,直到我按任意键。我的代码仅适用于ENTER或任何文本+ ENTER。有没有办法,我可以按任意键,然后不按ENTER键,程序继续?
答案 0 :(得分:3)
问题在于Java控制台需要与每个操作系统一起使用。此控制台不允许用户收听单个按键。为此,您需要创建一个GUI,如Swing GUI或使用其他第三方控制台库,如jCurses。
答案 1 :(得分:2)
我认为这不可能通过Java控制台实现。您需要某种可以侦听事件的API(键击(例如Swing或JNI))。
答案 2 :(得分:-1)
由于你想在交换机情况下等待当前执行,所以下面是可以帮助你的小代码。它会等到用户输入click + Enter。
代码:
import java.lang.Thread;
import java.util.Scanner;
public class App{
public void menu() throws InterruptedException
{
boolean exit = false;
Scanner scaner = new Scanner(System.in);
System.out.println("-- Command interpreter --");
System.out.println("[1] Write results to console");
System.out.println("[2] Write results to text file");
System.out.println("[3] exit");
System.out.println("-------------------------");
System.out.print("Input Value: ");
String s = scaner.nextLine();
int i = Integer.parseInt(s);
switch (i)
{
case 1:
{
ThreadB b = new ThreadB();
b.start();
synchronized(b)
{
b.wait();
}
System.out.println("\n\nPress any key to continue..");
scaner.next();
break;
}
default:
{
System.out.println("Unknown Entry.");
break;
}
}
if (exit)
{
System.out.println("Exit!");
return;
}
}
public static void main(String arg[])
{
try {
new App().menu();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
class ThreadB extends Thread{
Scanner scan = new Scanner(System.in);
@Override
public void run(){
while(scan.hasNext())
{
String abc = scan.next();
if(abc.equalsIgnoreCase("click"))
{
synchronized(this)
{
notify();
}
}
}
}
}