Я использую JNI для запуска Java-приложения из C. Хотя это быстро делается, пока я использую консольное приложение, с Swing-GUI все становится немного сложнее.
Длячтобы приложение оставалось «живым», я использую цикл while, который работает, пока GUI не закрыт.Во время выполнения этого цикла он всегда запрашивает, если приложение все еще выполняется, запрашивая логическое значение.
while(javaRunning){
if(JNI_FALSE == env->CallBooleanMethod(obj, boolMethod))
javaRunning = false;
}
Это значение изменяется, когда вызывается Java-функция WindowClosing (Event), чтобы указать, что пользователь закрывает окно.
К сожалению, это не работает, если я закрываю окно.Приложение C все еще пытается запросить логическое значение, даже если окно уже закрыто.Очевидно, он не может получить логическое значение до закрытия окна.Лучшим подходом было бы вызвать C-код из Java, чтобы сообщить ему о событии "WindowClosing".
Ну, насколько я могу видеть, это было бы возможно, если бы C-код загружался Java(с использованием DLL), но не через интерфейс вызова, где C был запущен и запускает приложение Java.Может быть, кто-нибудь знает, как обойти это.