2009-06-26 5 views
2

리플렉션을 사용하여 다른 Java 프로그램의 main (String [] args) 메소드를 찾고 호출하는 Java 프로그램이 있습니다. 이 다른 프로그램은 일반적으로 자체 스레드를 생성하는 경향이있는 스윙 응용 프로그램입니다. 나는이 다른 '프로그램'이 언제 끝나는지를 결정할 방법이 있는지 궁금해하고있었습니다. 어쨌든 호스트 프로그램과 같은 공간에서 실행되기 때문에 이것을 탐지 할 수 있는지 확실하지 않습니다. 현재의 방법은 열려있는 프레임이 우리 자신이 아니고 가장 큰 해결책이 아닌지 확인하는 것입니다. 프로그램에서 자식 프로그램을 실행하는 것은 실제로 액세스 할 수있는 옵션이 아닙니다.java reflection을 사용하여 시작된 응용 프로그램이 완료된시기를 결정하는 방법

편집 : 답변은 이중 접근 방식입니다. 먼저 ThreadGroup을 만들고 해당 그룹의 구성원 인 스레드에서 하위 프로그램을 실행하십시오. 그런 다음 자식 프레임에 속한 프레임이 있으면 Frame.getFrames()를 확인하십시오.

이 --Sandro

답변

1
별도의 ThreadGroup에 자식 응용 프로그램을 시작

, 감사 (아마 가장 데몬 스레드 그룹으로 설정)하고 주기적으로 실행중인 스레드 또는 하위 그룹이 포함되어 있는지 확인합니다.

+1

잘 모름 그것은 분리 된 EDT를 얻지 못할 것이고 main()이 끝나면이 체크는 잘못된 대답을 리턴 할 것입니다. – akarnokd

+0

비공개 API를 사용하여 AppContext를 설정해야합니다. –

+0

지금 사용해보세요. 곧 결과가 나올거야. – Sandro

0

이 하위 응용 프로그램이 사용하는 창을 찾는 방법이 있다면 적절한 Windows 수신기를 연결하고 모든 닫기 이벤트를 기다릴 수 있습니다.

편집 : 이벤트 리스너 방식을 사용은

적어도 수 있습니다 당신이 지속적으로 프레임없는 루프 쿼리. 스폰 된 스레드의 경우에는 단서가 없습니다. 자신의 스레드를 추적하고 응용 프로그램의 스레드를 발견 할 수있는 방법이 있다면 프레임과 동일한 루핑을 수행 할 수 있습니다.

편집 2 :

내 마음에 와서 어떤 스레드 및 기타 정보를 얻기 위해 자신에 JMX를 사용하는 것입니다,하지만 난 많은 세부 사항에 JMX를 모른다.

+0

하지만 스레드가 생성되면 어떻게 될까요? 어떻게 추적 할 수 있습니까? 그리고 지금은 Frames.getFrames()를 사용하여 창을 확인합니다. 그러나 윈도우에 청취자를 추가하는 것과 관계없이 시작입니다. – Sandro

관련 문제