我有一个控制台应用程序,在执行任务后,必须向用户提供反馈,例如“操作已完成”或“操作失败”以及详细错误。
问题是,如果我只是“让它运行”,输出消息将被打印,但控制台将很快关闭,没有时间阅读消息。
据我记忆,在C ++中,每个控制台应用程序都将以“按任意键退出”或类似的结尾。在C#中,我可以用
模拟这种行为Console.ReadKey();
但我怎么能用Java做呢?我正在使用Scanner类,但鉴于“输入”是我的Scanner实例:
input.next()
System.exit(0);
“任何关键”都可以使用,除了返回,这在这里是非常重要的。有什么指针吗?
答案 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 Java和Java 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();