2012-11-28 17 views
1

我正在研究混合C++/Qt/Java應用程序。在使用JNI啓動JVM之前,我從C++端打開QtSplashScreen。關閉QtSplashScreen時出現問題。我希望在應用程序準備運行時由Java端調用C++端的回調函數。但是,似乎在使用JNI或JNA從Java調用C++時,我需要將C++代碼編譯爲共享庫,這會破壞所有QtSplashScreen內部依賴關係。有任何想法嗎?Mixed C++/Qt/Java應用程序

謝謝。

回答

6

確定完全愚蠢的方式 - 但我會實現splashscreen和Java程序作爲由共同的父進程產生的獨立進程。然後我會通過UDP(最簡單的)或Mailboxes/Pipes與它們進行通信。恕我直言,當你需要用不同編程語言編寫的程序之間的通信時,你必須分離進程本身,並讓它通過TCP/UDP /郵箱/ IPC(或類似概念)相互通信。

+0

清潔和簡單,根本不愚蠢。 –

+0

我同意。在Qt的QLocalServer和QLocalSocket的文檔中,它使用Windows上的命名管道或Unix上的本地域套接字。如果你需要二進制文件,就好像它已經完成加載一樣,你甚至可以在臨時位置(通過啓動畫面)創建一個文件,然後在完成加載後讓java端刪除文件。 – phyatt

+0

非常感謝,我會嘗試 – user1808974

0

我是原始的海報。最後,解決方案是使用JNI調用返回布爾值的Java方法。此方法使用wait()等待Java端準備就緒。當發生這種情況時,應用程序會在同一對象上調用notifyAll(),並返回方法,這會使SplashScreen關閉,如下所示:

waitForJava(); splashScreen.close();

相關問題