【问题标题】:Java interactive input EOFJava交互式输入EOF
【发布时间】:2011-05-10 00:36:04
【问题描述】:

我正在尝试为棋盘游戏实现用户输入界面。我试图一次获取用户输入,然后将其写入文件(因为我需要保存用户所做的移动列表)。到目前为止,我所拥有的效果很好(读取输入并将其写入文件),但是,每当用户想要停止输入时,程序就会停止工作。 IE;当你按下 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 编程时,曾经有过 while (input != EOF);每当用户输入 ctrl+d 或 ctrl+c 时,它都会停止正在执行的操作,然后移至下一行代码。 我怎样才能在java中做到这一点?

非常感谢。

【问题讨论】:

  • Control-C 将终止您的应用程序

标签: java input eof


【解决方案1】:

如果您在每次写入后刷新,您至少应该在用户点击 control-c 时获得一个完整的文件。

至于在 control-c 发生后处理更多信息,您可以使用关闭钩子来做到这一点,例如:

Runtime.getRuntime().addShutdownHook(new Thread() {
    public void run() { 
        // do something before quiting
    }
});

但是,我不知道你可以取消终止。

我会为“不再输入”操作选择更正常的字符输入。

【讨论】:

  • 谢谢,我会试一试,只是为了体验:D
【解决方案2】:

您可以使用SignalHandler 捕获 Ctrl+C 信号。尽管我不推荐这样做,因为它会使用户难以退出您的应用程序。相反,您可以在用户不输入任何内容时停止输入,或者使用不同的命令信号。

【讨论】:

  • 谢谢,我已经把界面改成输入命令停止输入了。
【解决方案3】:

您需要同意指示用户完成的命令(例如“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(" ");
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    相关资源
    最近更新 更多