1

我正在开发一个混合的 C++/Qt/Java 应用程序。在使用 JNI 启动 JVM 之前,我正在从 C++ 端打开一个 QtSplashScreen。关闭 QtSplashScreen 时出现问题。我想在 C++ 端有一个回调,当应用程序准备好运行时,它会被 Java 端调用。但是,似乎当使用 JNI 或 JNA 从 Java 调用 C++ 时,我需要将 C++ 代码编译为共享库,这会破坏所有 QtSplashScreen 内部依赖项。有任何想法吗?

谢谢。

4

2 回答 2

6

好的完全愚蠢的方式 - 但我会将splashscreen和java程序实现为由共同父进程产生的单独进程。然后我会让它通过 UDP(最简单)或邮箱/管道相互通信。

恕我直言,当您需要在用不同编程语言编写的程序之间进行通信时,您必须将进程本身分开,并通过 TCP/UDP/Mailboxes/IPC(或类似概念)相互通信。

于 2012-11-28T16:49:14.800 回答
0

我是原始海报。最后的解决方案是使用 JNI 调用返回布尔值的 Java 方法。此方法使用 wait() 等待 Java 端准备好。发生这种情况时,应用程序会在同一对象上调用 notifyAll() 并返回该方法,这会使 SplashScreen 关闭,如下所示:

等待Java(); splashScreen.close();

于 2012-12-27T11:31:10.513 回答