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


81

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

关键是,如果我只是“让它运行”,将输出输出消息,但控制台不久后将关闭,从而没有时间阅读消息。

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

Console.ReadKey();

但是,如何用Java做到这一点呢?我正在使用Scanner类,但鉴于“输入”是我的Scanner实例:

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

除返回键外,“任何键”都将起作用,这在这里非常重要。有指针吗?

Answers:


102

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


17
这满足“按Enter退出”,但不满足“按任何键退出”,因为直到按Enter键它才会继续。
尼尔·汤姆森

我想“按Enter退出”仍然比“按除Enter退出的任何键”要好。谢谢,对我有用。
makoshichi 2011年

2
@marcolopes我参加聚会有点晚了,但是由于您正在询问某个应用程序,因此我猜问题是您让用户在GUI或应用程序内的其他位置按下了回车键。他们需要在控制台中按Enter键,只有在IDE中运行该键时,该键才可能可见。如果要在应用程序中按Enter,则需要其他解决方案。
Thunderforge

4
System.in.read()只能读取一个字节,但是ENTER在不同平台上可能会产生1个或多个字节,请记住Windows上的CRLF。因此可能是随后的read调用直接从第一个调用的CRLF返回LF,因此应用程序根本不等待输入。
ThorstenSchöning2015年

import java.io.IOException;也需要添加。
洋剑

24

我想补充一点,通常情况下,您希望程序仅在连接到控制台时才等待。否则(例如,如果它是管道的一部分),就没有必要打印消息或等待消息。为此,您可以这样使用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();
    }
}


7

您可以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();


您需要使用Scanner scan=new Scanner(System.in);
ACV

5

我使用了简单的技巧,要求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();
    }    
}

3

我已经输入了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


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

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

    s.nextLine();   
}

nextline是一个非常不错的选择,因为它可以帮助我们在按下Enter键时运行下一行。


1

一个简单的技巧:

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();
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.