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

问题描述 投票:71回答:8

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

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

据我所知,在C ++中,每个控制台应用程序都会以“按任意键退出”或类似的结尾。在C#中我可以用a来模拟这种行为

Console.ReadKey();

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

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

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

java console-application
8个回答
87
投票

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


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

6
投票

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

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

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

我个人没有用过它。


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();更好


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


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

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

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

        s.nextLine();

    }

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


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();
© www.soinside.com 2019 - 2024. All rights reserved.