2011-05-14 2 views
2

백그라운드에서 몇 가지 작업을 수행하는 콘솔 Java 응용 프로그램이 있습니다. Java는 키보드 버퍼에 무언가가 있는지 테스트하고 모든 콘솔 읽기 및 테스트가 차단된다는 것을 알고 있으므로 console kbhit()를 지원하지 않습니다.별도의 스레드는 키 누르기로 백그라운드 작업으로 응용 프로그램을 종료하는 좋은 전략입니까?

내가 할 일은 console.readLine()과 같은 백그라운드 스레드를 시작한 다음이 블로킹 호출이 끝난 후 종료 플래그를 넣는 것입니다. 응용 프로그램 백그라운드 작업은이 플래그를 확인하고 종료해야하는지 여부를 결정합니다.

현재 내 응용 프로그램은 작업하는 동안 (Logback 등을 통해 로깅) 콘솔에 쓰려고하지만 결코 읽지 않습니다.

그런 전략이 좋은 것입니까?

+0

나 콘솔에서 (Enter 키를 누른 후) 전체 라인 버퍼 너 시험 해봤 니? 걱정할 필요가있는 것은 플래그 동기화입니다. – mre

+0

@sthupahsmaht 어떤 깃발? 콘솔이 이미 Java –

+0

에서 동기화되어 있고 "콘솔에서 수행 한 백그라운드 스레드를 console.readLine()과 함께 시작한 다음 차단 호출이 끝난 후 종료 플래그를 두는 것이 좋습니다. 이 플래그를 확인하고 종료해야하는지 결정하십시오. " – mre

답변

1

이 ... 당신은 System.in.available()>0를 사용할 수 있지만, 만()`좋은 방법 같은 소리 console.readLine`에 실을 전용,

+0

키를 누른 경우 혼자서 입력하면 어떨까요? available()이 0보다 큰 값을 반환합니까? –

+0

예 System.in은 줄 바꿈을 버퍼링하므로 enter 만 누르면 1 (또는 Windows에서 2)까지 사용할 수 있습니다. –