Вопрос

У меня есть программа 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

http://www.rgagnon.com/javadetails/java-0014.html

Возможно, вы также захотите взглянуть на API-интерфейс Java Native Access (JNA) .

Чтобы ответить на ваш последний вопрос, вы не можете запустить исполняемый файл из своего фляги.

Однако вы можете сохранить его в своем jar-файле и извлечь его во временный каталог / файл перед его запуском (проверьте его наличие в первый раз и при необходимости извлеките). Это несколько упростит ваш дистрибутив, так как у вас есть только jar для распространения, и гарантирует, что вы запускаете исполняемый файл, соответствующий вашему jarred-коду Java.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top