Как вызвать функциональность С++ из Java
-
06-07-2019 - |
Вопрос
У меня есть программа Java, которая в основном представляет собой графический интерфейс и показывает данные, записанные в XML-файл из инструмента командной строки C++.Теперь я хочу добавить в Java-программу кнопку для обновления данных.Это означает, что моя программа должна вызывать функции C++.
Это лучший способ просто вызвать программу из Java через системный вызов?Программа C++ будет скомпилирована для Mac OS и Windows и всегда должна находиться в том же каталоге, что и программа Java.
Я хотел бы создать исполняемый файл. Может ли программа c храниться внутри jar и вызываться из моей программы?
Решение
Если предположить, что лучшего способа связи нет (SOAP, ICE, Sockets и т. д.), я бы вызвал исполняемый файл с помощью Runtime.exec ()
. JNI можно использовать для непосредственного взаимодействия, но я бы не рекомендовал это делать. Нет, вы не можете положить исполняемый файл в банку. Ну, вы можете, но вы не можете запустить его, так как оболочка не знает, как его запустить.
Другие советы
Если у вас есть доступ к коду и вы хотите получить «интерактивный» опыт работы с внешней программой (например, выполнить вызов, получить результаты, выполнить дополнительные вызовы), изучите JNI, который позволяет вам вызывать код C или C++ из приложения Java, включая и связывание сока JNI с вашим приложением C или C++ с помощью .
Видеть:
http://en.wikipedia.org/wiki/Java_Native_Interface
http://www.acm.org/crossroads/xrds4-2/jni.html
Если вам действительно нужно решение типа «запустить приложение и получить результаты», воспользуйтесь Runtime.exec(), который позволяет запускать внешнюю программу и захватывать ее выходные данные.
Видеть:http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=1
Возможно, вы также захотите взглянуть на API-интерфейс Java Native Access (JNA) . р>
Чтобы ответить на ваш последний вопрос, вы не можете запустить исполняемый файл из своего фляги.
Однако вы можете сохранить его в своем jar-файле и извлечь его во временный каталог / файл перед его запуском (проверьте его наличие в первый раз и при необходимости извлеките). Это несколько упростит ваш дистрибутив, так как у вас есть только jar для распространения, и гарантирует, что вы запускаете исполняемый файл, соответствующий вашему jarred-коду Java.