使控制台等待用户输入关闭

时间:2011-05-17 14:13:19

标签: java console-application

我有一个控制台应用程序,在执行任务后,必须向用户提供反馈,例如“操作已完成”或“操作失败”以及详细错误。

问题是,如果我只是“让它运行”,输出消息将被打印,但控制台将很快关闭,没有时间阅读消息。

据我记忆,在C ++中,每个控制台应用程序都将以“按任意键退出”或类似的结尾。在C#中,我可以用

模拟这种行为
Console.ReadKey();

但我怎么能用Java做呢?我正在使用Scanner类,但鉴于“输入”是我的Scanner实例:

input.next()
System.exit(0);

“任何关键”都可以使用,除了返回,这在这里是非常重要的。有什么指针吗?

8 个答案:

答案 0 :(得分:86)

在Java中,这将是System.in.read()

答案 1 :(得分:18)

我想补充一点,通常你会希望程序只有在连接到控制台时才会等待。否则(如果它是pipeline的一部分),没有必要打印消息或等待。为此你可以像这样使用Java Console

import java.io.Console;
// ...
public static void waitForEnter(String message, Object... args) {
    Console c = System.console();
    if (c != null) {
        // printf-like arguments
        if (message != null)
            c.format(message, args);
        c.format("\nPress ENTER to proceed.\n");
        c.readLine();
    }
}

答案 2 :(得分:6)

Java控制台输入的问题在于它是缓冲输入,需要输入密钥才能继续。

有这两个讨论: Detecting and acting on keyboard direction keys in JavaJava keyboard input parsing in a console app

后者使用JLine来解决他的问题。

我个人没有使用它。

答案 3 :(得分:6)

您可以使用nextLine();暂停

import java.util.Scanner
//
//
Scanner scan = new Scanner(System.in);

void Read()
{
     System.out.print("Press any key to continue . . . ");
     scan.nextLine();
}

但是,除了Enter之外,您按下的任何按钮都意味着您必须在此之后按Enter键,但我发现它比scan.next();更好

答案 4 :(得分:5)

我已经填写了x4u所说的内容。 Eclipse想要一个try catch块,所以我让它为我生成它。

try {
        System.in.read();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

它可能有各种各样的花里胡哨,但我认为对于想要命令行窗口不要退出的初学者应该没问题。

此外,我不知道这是多么常见(这是我第一次制作jar文件),但它不会自行运行,只能通过bat文件。

java.exe -jar mylibrary.jar

以上是bat文件在同一文件夹中的内容。似乎是一个安装问题。

Eclipse教程来自: http://eclipsetutorial.sourceforge.net/index.html

部分答案还来自:Oracle Thread

答案 5 :(得分:4)

我使用简单的hack,要求windows使用cmd命令,并将其发送到null。

// Class for Different hacks for better CMD Display
import java.io.IOException;
public class CMDWindowEffets
{
    public static void getch() throws IOException, InterruptedException
    {
        new ProcessBuilder("cmd", "/c", "pause > null").inheritIO().start().waitFor();
    }    
}

答案 6 :(得分:2)

    public static void main(String args[]) {
        Scanner s=new Scanner(System.in);

        System.out.println("Press enter to continue.....");

        s.nextLine();

    }

这个nextline是非常好的选择,因为只要按下回车键,它就会帮助我们运行下一行

答案 7 :(得分:0)

一个简单的技巧:

import java.util.Scanner;  

/* Add these codes at the end of your method ...*/

Scanner input = new Scanner(System.in);
System.out.print("Press Enter to quit...");
input.nextLine();