2012-11-28 4 views
1

혼합 된 C++/Qt/Java 응용 프로그램에서 작업 중입니다. JNI를 사용하여 JVM을 시작하기 전에 C++ 측에서 QtSplashScreen을 여는 중입니다. 내 문제는 QtSplashScreen을 닫을 때 발생합니다. 응용 프로그램을 실행할 준비가되었을 때 Java 측에서 호출하는 C++ 측에 콜백하고 싶습니다. 그러나 JNI 또는 JNA를 사용하여 Java에서 C++을 호출 할 때 모든 QtSplashScreen 내부 종속성을 손상시키는 공유 라이브러리로 C++ 코드를 컴파일해야합니다. 어떤 아이디어?혼합 C++/Qt/Java 응용 프로그램

감사합니다.

답변

6

괜찮아요.하지만 저는 스플래시 스크린과 자바 프로그램을 공통의 부모 프로세스에 의해 생성 된 별도의 프로세스로 구현할 것입니다. 그러면 UDP (가장 단순한) 또는 Mailboxes/Pipe를 통해 서로 통신하게됩니다.

IMHO, 다른 프로그래밍 언어로 작성된 프로그램 간 통신이 필요하면 프로세스 자체를 분리하고 TCP/UDP/Mailboxes/IPC (또는 유사한 개념)를 통해 서로 통신해야합니다.

+0

깨끗하고 단순하지만 전혀 바보가 아닙니다. –

+0

동의합니다. Qt의 QLocalServer 및 QLocalSocket 설명서에서는 Windows에서 명명 된 파이프 또는 Unix에서 로컬 도메인 소켓을 사용합니다. 로드가 완료된 것처럼 바이너리가 필요한 경우에는 스플래시 화면에서 임시 위치에 파일을 만든 다음로드가 완료되면 Java 측에서 파일을 삭제하도록 할 수도 있습니다. – phyatt

+0

대단히 감사합니다. 시도해 보겠습니다. – user1808974

0

나는 원래 포스터입니다. 결국 솔루션은 JNI를 사용하여 부울을 반환하는 Java 메소드를 호출하는 것이 었습니다. 이 메소드는 Java 측이 준비 될 때까지 wait()를 사용합니다. 그런 일이 발생하면 응용 프로그램은 같은 객체에 대해 notifyAll()을 호출하고 메서드가 반환되어 다음과 같이 SplashScreen을 닫습니다.

waitForJava(); splashScreen.close();

관련 문제