当前位置: 首页 > 面试题库 >

C ++可以调用Java代码吗?

邴俊民
2023-03-14
问题内容

我知道Java代码可以通过JNI调用C 代码。但是,是否可以通过JNI或其他方法再次从C 调用Java代码?


问题答案:

是的,您当然可以。这是一个例子:

这是java文件:

public class InvocationHelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
        System.out.println("Arguments sent to this program:");
        if (args.length == 0) {
            System.out.println("(None)");
        } else {
            for (int i=0; i<args.length; i++) {
                System.out.print(args[i] + " ");
            }
            System.out.println();
        }
    }
}

还有一些使用它的C ++:

void invoke_class(JNIEnv* env) {
  jclass helloWorldClass;
  jmethodID mainMethod;
  jobjectArray applicationArgs;
  jstring applicationArg0;

  helloWorldClass = (env)->FindClass("InvocationHelloWorld");
  if(! helloWorldClass )
  {
    std::cerr<<"Couldn't get \"InvocationHelloWorld\""<<std::endl;
    return;
  }

  mainMethod = (env)->GetStaticMethodID(helloWorldClass, "main", "([Ljava/lang/String;)V");
  if(! mainMethod )
  {
    std::cerr<<"Coulnd't get \"InvocationHelloWorld::main\""<<std::endl;
    return;
  }

  applicationArgs = (env)->NewObjectArray(1, (env)->FindClass("java/lang/String"), NULL);
  applicationArg0 = (env)->NewStringUTF("From-C-program");
  (env)->SetObjectArrayElement(applicationArgs, 0, applicationArg0);

  (env)->CallStaticVoidMethod(helloWorldClass, mainMethod, applicationArgs);
}


 类似资料:
  • 问题内容: 有没有人能将C#代码集成到Java应用程序中呢? 代码很小,所以我可以用Java重写,但是如果可能的话,我宁愿重用代码。不要重复自己,等等。 另外,我知道我可以将C#公开为Web服务或其他任何东西,但是其中包含一些安全性/加密功能,因此,我宁愿将其紧密集成。 编辑:它将在基于服务器的应用程序上,因此“下载”另一个运行时是无关紧要的。 问题答案: 有一个IL到Java字节码编译器Gras

  • gcc-g-i/usr/lib/jvm/java-1.6.0-openJDK-1.6.0.0.x86_64/include/-i/usr/lib/jvm/java-1.6.0-openJDK-1.6.0.0.x86_64/include/-i/usr/lib/jvm/java-1.6.0-openJDK-1.6.0.0.x86_64/include/-i/usr/lib/jvm/java-1.6.

  • 在Repast Simphony中,可以从运行时环境查看模拟中所有代理的表(每秒)。有没有简单的方法来保存表或运行时环境中的数据?或者我需要编写代码来复制表显示的输出?

  • 问题内容: 现在我有了一些C源代码,我想在我的Java应用程序中使用它。我需要执行C源代码,并将结果返回到我的Java应用程序。与其将所有C源代码重写为Java,我如何在Java应用程序中重用C源代码? 问题答案: 看一下Java Native Interface 。 Java本机接口(JNI)是一种编程框架,它使Java虚拟机(JVM)中运行的Java代码能够被本机应用程序(特定于硬件和操作系统

  • 本文向大家介绍Swift调用Objective-C代码,包括了Swift调用Objective-C代码的使用技巧和注意事项,需要的朋友参考一下 最近iOS开发之新编程语言Swift在iOS开发圈内反响比较大,国内外都有很多教程或小示例。 虽然Swift这门语言仍然在不断的进化之中,而且变动还是比较大,苹果公司也不承诺目前所写代码会在将来兼容,但仍挡不住iOS开发者的热情。 为什么要使用Swift调

  • 问题内容: 是否可以在运行时从Java代码以编程方式调用Ant或NSIS脚本?如果是这样,怎么办? 问题答案: 您 可以 从Java代码调用ant脚本。 请参阅本文(向下滚动至“通过Java运行Ant”部分)和本文: 更新资料 我尝试使用以下ant文件,它没有“告诉”任何内容(没有控制台输出),但是它 起作用了 :该文件确实被移动了 当我再次尝试时(当无法移动(已经移动)时),我得到了。 我认为这