2010-04-06 173 views
2

我需要从我的C运行这行++程序的java:如何调用从C++

Java的罐子Test.jar的文本1文本2

的Java应用程序会给出一个浮点值,并把它交给C++程序。

我该怎么做?我从来没有从我的ms visual studio C++文件中调用java的东西。

+0

为什么你不接受您的任何问题的答案? – Shaihi 2010-04-06 10:11:34

+0

我不知道我需要接受答案。顺便说一下,如何接受? – karikari 2010-04-06 11:59:06

+0

看起来像他“接受”了他自己的“答案”,这是另一个问题>。< – Kayvar 2013-03-21 21:44:43

回答

0

当我直接在我的命令提示符下运行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; 
} 
-1

最简单的,如果你可以修改你的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上。

也有更复杂的解决方案,

  • 发送一些JASON的通过插座....等
  • 写在Java中的文本文件,在 C++读取。
  • MPI ...
  • 极端在这种情况下CORBA)
+0

我真的不认为''set'是如何工作的。 – Blindy 2010-04-06 08:56:37

+0

没有测试过,你说得对,更正了,谢谢。 – bua 2010-04-06 09:08:50

+0

这不行。当系统加速时,它创建自己的应用程序运行环境(C++父母环境的副本)。当Java应用程序修改环境时,它正在修改它自己的环境(而不是它的父母)。因此,父母将永远不会看到chnage。 – 2010-04-06 09:59:00

0

一个简单的解决方案是使用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); 
+0

我试过了代码,但仍然无法使用。它以某种方式不传递来自jar应用程序的float值。 的#include 的#include 使用命名空间std; int main() { float value; FILE * child = popen(“java -jar simmetrics_jar_v1_6_2_d07_02_07.jar text1 aab676788”,“r”); fscanf(child,“%f”,&value); (stdout,“从simmetrics得到的值:%f \ n”,value); fclose(child); return 0; } – karikari 2010-04-07 00:49:48

+0

您是否检查popen的结果?如果它无法启动Java虚拟机或无法找到该jar文件,则会产生错误。 – 2010-04-07 15:33:06