我正在尝试为棋盘游戏实现用户输入界面。我试图一次获取一个用户输入,然后将其写入文件(因为我需要保存用户所做的移动列表)。我到目前为止,工作得很好(读取输入并将其写入文件),但是,每当用户想要停止输入时,程序就会停止工作。即;按ctrl + c,程序结束。
到目前为止,我已经在主函数
之外声明了fileName变量public static void main(String[] args) throws IOException {
BufferedReader inputReader = new BufferedReader (new InputStreamReader (System.in));
try {
FileWriter outFile = new FileWriter (fileName);
PrintWriter out = new PrintWriter (outFile);
System.out.print ("Enter move: ");
String line = inputReader.readLine();
while (line != null) {
System.out.print ("Enter move: ");
out.write(inputReader.readLine());
out.write(" ");
}
out.close();
} catch (IOException e) {
System.out.println (e.getMessage());
}
System.out.println ("Reached here");
}
我想要做的是每当用户想要停止输入时,我想到达打印行,其中显示“已到达此处”。我想这样做,因为一旦在循环之外,我可以读取文件然后拆分输入并操纵它。我记得在用C编程时,曾经有过(输入!= EOF);每当用户输入ctrl + d或ctrl + c时,它会停止它正在做的任何事情,然后移动到下一行代码。 我怎么能在java中做到这一点?
非常感谢。
答案 0 :(得分:2)
如果在每次写入后刷新,则在用户点击control-c时至少应该获得一个完整的文件。
对于在control-c发生后处理更多信息,您可以使用关闭钩子来执行此操作,例如:
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
// do something before quiting
}
});
但是,我不知道你可以取消终止。
我会为“不再输入”操作选择更正常的字符输入。
答案 1 :(得分:1)
您可以使用SignalHandler捕获Ctrl + C信号。虽然我不建议这样做,因为这会让用户很难退出你的应用程序。相反,当用户不输入任何内容或使用不同的命令信号时,您可以停止输入。
答案 2 :(得分:0)
您需要同意指示用户已完成的命令(例如“EOF”)并在while循环中添加以下内容:
while (line != null) {
System.out.print ("Enter move: ");
String r = inputReader.readLine();
if ( r != null ) {
if ( "EOF".equals(r) ) break;
}
out.write();
out.write(" ");
}