2010-03-30 5 views
2

클러스터 응용 프로그램으로 사용중인 Java Swing 응용 프로그램이 있습니다. 문제는 클러스터가 Java 응용 프로그램을 종료하려고 할 때마다 중단되고 Windows에 "지금 종료"대화 상자가 표시된다는 것입니다. 이 응용 프로그램은 서버 유형이므로 응용 프로그램이 연결될 때마다 스레드가 생성됩니다.Java Swing 응용 프로그램이 TERM 신호를받은 후에 종료되지 않습니다.

클러스터가 this 문서에 제시된 프로그램을 사용하여 TERM 신호를 전송한다는 것을 알았습니다. 그러나 콘솔 응용 프로그램이 클러스터 응용 프로그램으로 사용될 때 클러스터는 몇 개의 TERM 신호 이후에 프로세스를 종료 할 수 있습니다.

또한 NetBeans 6.8을 사용하여 새 프로젝트를 만들 때 사용할 수있는 바닐라 샘플 데스크톱 응용 프로그램을 사용해 보았습니다. 또한 신호를 수신 한 후에도 종료되지 않습니다.

위의 데모에서부터 나는 스윙이나 스레드와 관련이 있다고 생각합니다. 아무도 이것으로 나를 도울 수 있습니까? 고맙습니다.

편집 : 다른 신호를 보내는 것 같지만 작업 관리자를 사용하여 죽일 수 있습니다.

답변

2

Java 응용 프로그램이 TERM 신호를 수신하면 종료되기 전에 등록 된 종료 훅을 실행합니다. 한 가지 가능성은 이러한 종료 ​​훅 중 하나가 무기한으로 차단되고 있거나 다른 경우에는 실행 시간이 길어 (> 30 초) Windows "지금 종료"대화 상자가 표시됩니다.

시도해 볼 수있는 한 가지 방법은 단순히 콘솔에 인쇄하고 실제로 호출 중인지 확인하는 종료 훅을 등록하는 것입니다. 그러나 불행하게도 훅이 임의의 순서로 실행되므로 다른 종료 훅이이 시점에서 실행되었는지 여부를 확인할 방법이 없습니다.

+0

강제로 레지스트리의 어딘가에 강제 종료 작업을 설정하여이 문제를 다소 "고정"했습니다. 내가 언급 한대로했으나 결과를 잊어 버렸습니다. 꽤 바쁜시기 였기 때문에 나는이 질문을 잊어 버렸다. –

관련 문제