2016-09-26 4 views
1

Java가 제 프로그래밍 언어가 아니기 때문에 Java에 대한 전문 지식이 일반적으로이 영역에 제한되어 있습니다.Java 콘솔 응용 프로그램이 잠겼습니다.

시나리오

는이 응용 프로그램은 서비스 나 데몬처럼 무기한 실행하도록되어있다. 주된 목적은 다른 프로세스에 의해 삽입 될 때 DB의 일부 행을 처리하는 것입니다.

응용 프로그램은 때때로 System.out.println을 통해 로그 메시지를 출력합니다. 또한 다른 로그 파일을 사용합니다. 이전에 log4j를 사용했지만 그 순간은 비활성화되어 있습니다.

또한 도움이 될 경우 Windows 서버 환경에서 실행 중입니다. 나는 지금 리눅스를 사용할 수 없다.

문제

문제, 드문 경우에, 나는 잠 깁니다 준비/찌르다 ENV에서 응용 프로그램을 찾거나 더 이상 DB 행을 처리하지 않는 것이다. 화면에 Enter를 몇 번 누르고 나면 이전과 같이 평소대로 처리를 시작합니다. 사용자의 입력을 기대하지 않기 때문에 이상합니다. 응용 프로그램에있는 모든 입력은 명령 줄에서 또는 DB에서입니다.

또한 DB 문제가 아닌지 확실히 알고 있습니다. 앱이 테이블 잠금을 기다리지 않습니다. 일부 파일 잠금 또는 System.out 스트림이 잠겨있을 수 있습니다. 나중에 화면의 키 스트로크가 응용 프로그램을 '깨우는'것을 볼 때까지 나는 가능성을 생각하지 않았습니다.

누군가 내가 이것을 더 디버깅 할 수있는 방향으로 가르키고 있는지 궁금합니다.

답변

1

Microsoft는 콘솔 창을 마우스로 사각형 영역을 선택할 수 있도록 만들었습니다. 여태까지는 그런대로 잘됐다.

그리고 가정 위해

은 (자신의 무한한 지혜)가 동결, 쉽게 텍스트를 스크롤 할 수있는 동안 사용자가 텍스트를 선택 할 수 있도록하는는 텍스트 동안 방출하려고하면 터미널 창 주최 과정 당신은 텍스트를 선택하고 있습니다. (*)

그리고 단지 을 클릭하면 마우스를 사용하여 콘솔 창을 클릭하면 (무한한 지혜로) 창을 텍스트 선택 모드로 놓고 그 존재를 목격하게됩니다. 작은 흰색 사각형.

창을 클릭하면 단순히 전경으로 창을 가져 오기 때문에 매우 불행한 일입니다. 그러나 여기에는 거대한 gotcha가 있습니다. 콘솔 창이 아직 포 그라운드에 없으면 클릭하면 포 그라운드로 이동합니다. 그러나 콘솔 창이 이미 포 그라운드에 있으면 클릭하면 선택 모드로 들어갑니다. (물론 대부분의 사람들은 창문이 이미 포 그라운드에 있는지 아닌지에 대해 거의 알지 못하거나 신경 쓰고 싶지 않습니다.)

따라서 결론은 다음과 같습니다. 창을 클릭하지 마십시오. 필요한 경우 캡션 만 클릭하십시오. 실수로 창을 클릭 한 다음 [Enter] 키를 누르거나 다시 클릭하면 작은 흰색 선택 사각형이 사라집니다.

작은 흰색 선택 사각형이있는 한 프로그램이 고정되어 있습니다.


(*) 이제는 프로세스를 고정하지 않고 선택하는 동안 쉽게 창 표시를 고정시킬 수 있습니다. 그들은 프로세스의 결과물이 버퍼링되고 화면에 덤핑 될 수 있도록 만들었지 만, 선택을 완료하면 세계 지배에 대한 계획이 너무 바빴던 것 같습니다. 나는 사람들이 데이터를 처리하고 있다는 인상을 받으면서 마이크로 소프트 콘솔 윈도우가 유휴 상태에 있기 때문에 지금까지 얼마나 많은 시간 (= 돈)이 낭비 됐는지 생각하기 시작할 수 없다.

+0

감사합니다. 원인이라고 생각합니다. 나는 때때로 나는 선택 모드에 있다는 것을 결코 알지 못한다. – Scalable

관련 문제