Java暂停直到任何按键被按下

时间:2014-01-24 17:46:22

标签: java

我想知道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键,程序继续?

3 个答案:

答案 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();
        }
            }
        }
    }
}