我需要從我的C運行這行++程序的java:如何調用從C++
Java的罐子Test.jar的文本1文本2
的Java應用程序會給出一個浮點值,並把它交給C++程序。
我該怎麼做?我從來沒有從我的ms visual studio C++文件中調用java的東西。
我需要從我的C運行這行++程序的java:如何調用從C++
Java的罐子Test.jar的文本1文本2
的Java應用程序會給出一個浮點值,並把它交給C++程序。
我該怎麼做?我從來沒有從我的ms visual studio C++文件中調用java的東西。
當我直接在我的命令提示符下運行java命令,它工作。但是當我從C++文件運行命令時,錯誤顯示「系統無法執行指定的程序」。
這裏是我的代碼,使用MS IM Visual Studio 2005中:
#include "stdafx.h"
#include <conio.h>
int _tmain(int argc, _TCHAR* argv[])
{
float value;
FILE *child = _popen("java -jar c:\simmetrics_jar_v1_6_2_d07_02_07.jar text1 ssdyr445", "r");
if (fscanf(child, "%f", &value) == 1)
{
fprintf(stdout,"Got Value from simmetrics: %f\n", value);
}
else
{
fprintf(stdout,"ERROR\n");
}
fclose(child);
return 0;
}
如果要使用強耦合,請使用JNI wrapper。
最簡單的,如果你可以修改你的Java代碼:
結果寫入到環境變量(僞下面的代碼):(。在Java應用程序直接寫ENV)
解決方案1.
的java:
...
setenv('ret', somefloatvalue);
...
exit..
C++:
system("java -jar test.jar text1 text2")
...
getenv("ret")
(我還沒有測試,但這裏重要的是背景下,的確系統創建另一個shell(控制檯), 如果是,你不會看到這些ENVS,因此其他一些產卵方法是必要的)
CreateProcess() on windows fork()在linux上。
也有更復雜的解決方案,
一個簡單的解決方案是使用POPEN()和pclose函數()。
函數popen(),forks()和execs()是一個子進程。但它將子流程標準化並標準化了由popen創建的流對象。因此,在母體書面方式任何給流將其發送到子過程的標準中,而任何子過程寫入標準出可以從由父流中讀取:
double value;
FILE* child = popen("java -jar test.jar text1 text2", "r");
if (fscanf(child, "%f", &value) == 1)
{
fprintf(stdout,"Got Value: %f\n", value);
}
else
{
fprintf(stdout,"ERROR\n");
}
fclose(child);
我試過了代碼,但仍然無法使用。它以某種方式不傳遞來自jar應用程序的float值。 的#include
您是否檢查popen的結果?如果它無法啓動Java虛擬機或無法找到該jar文件,則會產生錯誤。 – 2010-04-07 15:33:06
爲什麼你不接受您的任何問題的答案? – Shaihi 2010-04-06 10:11:34
我不知道我需要接受答案。順便說一下,如何接受? – karikari 2010-04-06 11:59:06
看起來像他「接受」了他自己的「答案」,這是另一個問題>。< – Kayvar 2013-03-21 21:44:43