如何从c程序运行java程序?

时间:2015-08-21 00:48:16

标签: java c linux terminal

我已经搜索了这个,但是结果要么已经超过10年了,也没有解释JNI是什么,或者它是唯一的方法,还是C ++或C#的结果。所以这是我的问题:

如何使用以下代码作为示例从C程序运行Java程序?我对以下代码进行了哪些具体更改,以使C程序成功调用java带参数的程序?

在CentOS终端中,当我在命令行中输入以下内容时,我能够成功运行java程序:

java -cp . my.package.SomeClass 1 2 3

同样,在终端中的同一文件夹中,当我在命令行中键入以下内容时,我能够成功运行C程序:

./hello  

hello.c的代码是:

#include <stdio.h>

main() {
    printf("Hello World from C!\n");
}  

如何修改hello.c的代码,使其运行my.package.SomeClass参数1 2 3

例如,如何完成以下操作,但不会抛出错误:

#include <stdio.h>

main() {
    printf("Hello World from C!\n");
    java -cp . my.package.SomeClass 1 2 3  //What is the right syntax here?
}  

编辑

为了将来读者的目的,并避免多余的帖子,请在答案中说明如何调用方法,例如SomeClass.someMethod(1,2,3);

3 个答案:

答案 0 :(得分:2)

你确实需要使用JNI(据我所知)。我一直在这里使用文档:

http://docs.oracle.com/javase/7/docs/technotes/guides/jni/

它有点简洁,但它可行。它处理C和C ++。我不知道C#,所以我不能对此发表评论(虽然如果被迫猜测我会拒绝C#)。

从C运行java程序将要求您使用JNI函数以编程方式启动JVM,然后找到您的类,然后找到您的方法,然后调用它。这里有一些例子可以帮助您入门:

http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/invocation.html#wp9502

如果您需要更多帮助,可能需要先找一个完成此操作的人来指导您完成这些步骤。

答案 1 :(得分:2)

我相信您正在寻找exec系列功能。像,

#include <stdio.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
        const char *file = "java";
        const char *arg = "-cp . my.package.SomeClass 1 2 3";
        printf("Hello World from C!\n");
        execlp(file, arg, (char *) NULL);
}

答案 2 :(得分:2)

如果你要做的 all 是从你的程序运行java -cp . my.package.SomeClass 1 2 3,你可以使用运行外部命令的system

system("java -cp . my.package.SomeClass 1 2 3");

这是最简单的解决方案,但不是很灵活 - 例如,除了提供参数之外,您无法与Java程序进行交互。