2011-05-10 23 views
0

보드 게임을위한 사용자 입력 인터페이스를 구현하려고합니다. 사용자 입력을 한 번에 하나씩 가져온 다음 파일에 쓰려고합니다 (사용자의 이동 목록을 저장해야하므로). 내가 지금까지 가지고있는 것은 잘 작동한다 (입력을 읽고 그것을 파일에 쓰는 것). 그러나 사용자가 입력을 멈추고 싶을 때마다 프로그램은 그냥 멈춘다. I.E; 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

답변

0

당신은 명령이 사용자 (예 "EOF"를) 수행을 나타내는 동의하고 while 루프에서 다음을 추가해야합니다 . 사용자가 응용 프로그램을 종료하는 것이 어렵 기 때문에이 방법을 권장하지는 않습니다. 대신 사용자가 아무 것도 입력하지 않거나 다른 명령 신호를 사용할 때 입력을 중지 할 수 있습니다.

+0

대단히 감사합니다. – Triple777er

2

각 쓰기 후에 플러시하는 경우 사용자가 control-c를 눌렀을 때 전체 파일을 가져와야합니다. 그러나

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

, 난 당신이 종료를 취소 할 수 있다는 것을 알고하지 않습니다 제어-C이 발생 후 자세한 정보를 처리로

, 당신은 같은 종료 후크를 사용하여 그렇게 할 수 있습니다.

'더 이상 입력하지 않음'작업에 대해보다 일반적인 문자 입력을 선택합니다.

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

고마워, 나는 단지 경험을 위해이 도구를 제공 할 것이다 : D – Triple777er

1

당신은 SignalHandler를 사용하려면 Ctrl + C 신호를 잡을 수 :

+0

감사합니다. 인터페이스를 입력 중단 명령으로 변경했습니다. – Triple777er