我有一个控制台应用程序,在执行其任务后,必须向用户提供反馈,例如“操作已完成”或“操作失败”以及详细错误。
问题是,如果我只是“让它运行”,输出消息将被打印,但控制台将很快关闭,没有时间阅读消息。
据我所知,在C ++中,每个控制台应用程序都会以“按任意键退出”或类似的结尾。在C#中我可以用a来模拟这种行为
Console.ReadKey();
但是我怎么能用Java做呢?我正在使用Scanner类,但鉴于“输入”是我的Scanner实例:
input.next()
System.exit(0);
“任何关键”都可以使用,除了返回,这在这里是非常重要的。有什么指针吗?
在Java中,这将是System.in.read()
我想补充一点,通常你会希望程序只有在连接到控制台时才会等待。否则(如果它是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();
}
}
Java控制台输入的问题是它是缓冲输入,需要输入键才能继续。
有两个讨论:Detecting and acting on keyboard direction keys in Java和Java keyboard input parsing in a console app
后者使用JLine来解决他的问题。
我个人没有用过它。
您可以使用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();
更好
我已经把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
我使用简单的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();
}
}
public static void main(String args[]) {
Scanner s=new Scanner(System.in);
System.out.println("Press enter to continue.....");
s.nextLine();
}
这个nextline
是非常好的选择,因为只要按下回车键,它将帮助我们运行下一行
一个简单的技巧:
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();