2011-05-10 91 views
0

我正试图实现棋盘游戏的用户输入界面。我试图一次获得一个用户输入,然后将其写入一个文件(因为我需要保存用户所做的动作列表)。到目前为止,我的工作很好(读取输入并将其写入文件),但是,只要用户想要停止输入,程序就会停止工作。即;当你按下ctrl + c时,程序就结束了。Java交互式输入EOF

这是我到目前为止,文件名可变已申报的主要功能

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中做到这一点?

非常感谢。

+1

Control-C将终止您的应用程序 – Dimitar 2011-05-10 00:46:09

回答

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

Thankyou非常,它的作品。 – Triple777er 2011-05-10 00:54:36

2

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

至于处理后控制-C发生的更多信息,你可以通过使用一个关闭挂钩,例如:

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

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

我会为'没有更多输入'动作选择一个更正常的字符输入。

+0

谢谢,我会给这个去,只是为了体验:D – Triple777er 2011-05-10 01:25:29

1

您可以使用SignalHandler赶按Ctrl + C信号。虽然我不会推荐这个,因为它会让用户很难退出你的应用程序。相反,当用户不输入任何内容或使用不同的命令信号时,您可以停止输入。

+0

谢谢,我已将接口更改为输入命令以停止输入。 – Triple777er 2011-05-10 01:25:01