[英]How to call c++ functionality from java
我有一個主要是GUI的Java程序,它顯示了從c ++命令行工具寫入xml文件的數據。 現在我想在java程序中添加一個按鈕來刷新數據。 這意味着我的程序必須調用c ++功能。
是通過系統調用從java調用程序的最佳方法嗎? c ++程序將為mac os和windows編譯,並且應始終與java程序位於同一目錄中。
我想生成一個可執行文件,可以將c程序存儲在jar中並從我的程序中調用嗎?
如果您可以訪問代碼並希望獲得外部程序的“交互式”體驗(例如,調用,獲取結果,進行其他調用),請研究JNI,它允許您通過包括從Java應用程序調用C或C ++代碼並將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
假設沒有更好的通信方法(SOAP,ICE,套接字等),我將使用Runtime.exec()
調用可執行文件。 JNI可以直接用於界面,但我不推薦它。 不,你不能把一個可執行文件放在jar中。 嗯,你可以,但你不能運行它,因為shell不知道如何運行它。
您可能還想查看Java Native Access API(JNA) 。
要回答最后一個問題,您無法在jar中運行可執行文件。
但是,您可以將其存儲在jar中並在運行之前將其提取到臨時目錄/文件中(第一次檢查其存在並在必要時提取)。 這將簡化您的分發,因為您只需要分發jar,並確保您運行的是與您的jar代碼相匹配的可執行文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.