Я работаю над смешанным приложением C ++ / Qt / Java. Я открываю QtSplashScreen со стороны C ++ перед запуском JVM с использованием JNI. Моя проблема возникает при закрытии QtSplashScreen. Я хотел бы иметь обратный вызов на стороне C ++, который вызывается стороной Java, когда приложение готово к запуску. Однако, кажется, что при вызове C ++ из Java с использованием JNI или JNA мне нужно скомпилировать код C ++ в виде разделяемой библиотеки, которая нарушает все внутренние зависимости QtSplashScreen. Есть идеи?
Благодарю.
Ладно, это совершенно глупо, но я бы реализовал splashscreen и java-программу как отдельные процессы, порожденные общим родительским процессом. Затем я бы связал его друг с другом через UDP (самый простой) или с помощью почтовых ящиков / каналов.
ИМХО, когда вам нужно взаимодействие между программами, написанными на разных языках программирования, вы должны отделить сам процесс и заставить его взаимодействовать друг с другом через TCP / UDP / Mailboxes / IPC (или схожие концепции).
Я оригинальный постер. В конце концов решение состояло в том, чтобы использовать JNI для вызова метода Java, который возвращает логическое значение. Этот метод использует wait () для ожидания готовности стороны Java. Когда это происходит, приложение вызывает notifyAll () для того же объекта и возвращает метод, что закрывает SplashScreen, как в:
waitForJava ();
splashScreen.close ();