2012-11-28 4 views
1

Java 프로그램에서 많은 XML 파일 집합을 처리하고 있습니다. 이 프로세스는 실행하는 데 몇 시간이 걸리고 때로는 중지해야합니다. 지금은 CTRL-C을 사용하여 파일을 삭제하고 작업중인 파일을 기록한 다음 나중에 해당 파일의 데이터를 제거하고 다시 처리합니다.명령 행이 실행되는 동안 Java 프로그램으로 전송

Java가 명령 줄에서 사용자 입력을 기다리는 동안 계속 작동하도록하는 방법이 있습니까? 또한 수신 대기 중 명령 프롬프트에 로그 정보를 계속 출력 할 수 있습니까?

파일 사이에 사용자 입력을 몇 초 동안 기다리는 것이 고려되었지만 전체 처리에 시간이 많이 걸리며 사용자 입력을 쉽게 시간 초과 할 수있는 방법이 있는지 확신하지 못합니다.

+0

당신은 볼이 표시되어야합니다 http://stackoverflow.com/questions/11521597/java-console-application-main-thread-spawns-a-key-listener-thread –

답변

1

XML 프로세서가 실행될 다른 스레드를 생성하는 데 관심이 있습니다. java.util.concurrent 라이브러리를 살펴보십시오.

메인 스레드는 사용자 입력을 처리 할 수 ​​있지만 다른 스레드는 콘솔에보고 할 수 있습니다. 이 둘 사이의 동시성 문제를 다루는 것은 어려울 수 있습니다. 두 사람 사이의 의사 소통을 피하면서 가능한 한 두통을 피하는 것이 좋습니다.

당신은

Thread xmlProcessorThread = new Thread(yourRunnableXMLProcessor); 
xmlProcessorThread.run(); 

같이 보입니다 코드를 추가하고 XML 프로세서 (따라서 이름 yourRunnableXMLProcessor)에 runnable 인터페이스를 추가하게 될 겁니다 명령 줄 응용 프로그램에서

+0

이 얼마나 큰 jboss 및 hadoop과 같은 대규모 프로젝트에서이 작업을 수행합니까? 즉, 백그라운드에서 대규모 프로세스를 실행하지만 연결할 수있는 명령 줄 쉘 인터페이스가 있습니다. – FaultyJuggler

+0

그들은 비슷한 방식으로 작동하지만, 내가 제안한 방식대로 작동한다고 말하는 것은 지나친 단순화 일 수 있습니다. 일반적으로 두 메시지 사이에 전달되는 메시지가 있습니다. 문제가 자체적으로 처리되는 방식입니다. http://en.wikipedia.org/wiki/Message_passing에서 배경을 추가 할 수 있습니다. 다시 한번,'java.util.concurrent' 라이브러리가 여러분에게 필요한 툴을 제공 할 것입니다. – MushinNoShin

0

는 새로운 스레드를 시작 실제로 파일을 처리하는 작업을 수행합니다. 처리 스레드는 각 파일 다음에 내부 플래그를 검사하여 계속할지 여부를 결정할 수 있습니다. 주 응용 프로그램 스레드는 명령 행 입력을 계속 수신하고 입력을받을 때이를 기반으로 플래그 값을 설정할 수 있습니다.

관련 문제