Как вызвать функциональность c ++ из Java - PullRequest
7 голосов
/ 31 июля 2009

У меня есть Java-программа, которая в основном представляет собой графический интерфейс, и она показывает данные, которые записываются в xml-файл из инструмента командной строки c ++. Теперь я хочу добавить кнопку в программу Java, чтобы обновить данные. Это означает, что моя программа должна вызывать функциональность c ++.

Это лучший способ просто вызвать программу из Java через системный вызов? Программа c ++ будет скомпилирована для Mac OS и Windows и всегда должна находиться в том же каталоге, что и Java-программа.

Я хотел бы сгенерировать исполняемый файл. Может ли программа c храниться внутри jar и вызываться из моей программы?

Ответы [ 4 ]

6 голосов
/ 31 июля 2009

Если у вас есть доступ к коду и вы хотите «интерактивно» взаимодействовать с внешней программой (например, выполнить вызов, получить результаты, выполнить дополнительные вызовы), исследуйте 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

5 голосов
/ 31 июля 2009

Предполагая, что нет лучшего способа связи (SOAP, ICE, Sockets и т. Д.), Я бы назвал исполняемый файл, используя Runtime.exec(). JNI можно использовать для непосредственного взаимодействия, но я бы не рекомендовал это делать. Нет, вы не можете положить исполняемый файл в банку. Ну, вы можете, но вы не можете запустить его, так как оболочка не знает, как его запустить.

3 голосов
/ 31 июля 2009

Вы также можете взглянуть на API Native Access Java (JNA) .

2 голосов
/ 31 июля 2009

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

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

...